使用 PHP 从复杂的 JSON 有效负载中获取所有键值对



我有一个从服务器收到的JSON文件,它不能在任何时候更改。 我正在尝试使用 PHP 取出所有key:value对,但我的成功是部分的。

有没有人处理过这种麻烦,因为我还没有找到任何答案?

如您所见,我做了一些编码

<?php
$content = ('{
"app_id": "test1",
"dev_id": "temperature",
"hardware_serial": "0056748F03A5C6CB1",
"port": 1,
"counter": 2217,
"payload_raw": "AYgAAAAAAAAAAAA=",
"payload_fields": {
"height": 0,
"pressure": 0,
"temperature": 3.92
},
"metadata": {
"time": "2019-07-16T20:39:37.761000811Z",
"frequency": 867.9,
"modulation": "LORA",
"data_rate": "SF7BW125",
"coding_rate": "4/5",
"gateways": [
{
"gtw_id": "eui-b346ebfffec332dc",
"timestamp": 2514820708,
"time": "2019-07-16T20:39:37.735765Z",
"channel": 7,
"rssi": -65,
"snr": 9.5,
"rf_chain": 0,
"latitude": 44.754036,
"longitude": 19.690582,
"location_source": "registry"
}
]
},
"downlink_url": "https://integrations.net"}');

$mypayload = json_decode($content, true);

//decode and save JSON data
$AppID               = $mypayload['app_id'];
$DevID               = $mypayload['dev_id'];
$HardwareSerial      = $mypayload['hardware_serial'];
$Counter             = $mypayload['counter'];
$PayloadRaw          = $mypayload['payload_raw'];
$PayloadFields       = $mypayload['payload_field'];
$Time                = $mypayload['metadata']['time'];
$DataRate            = $mypayload['metadata']['data_rate'];
$CodingRate          = $mypayload['metadata']['coding_rate'];
$GtwID               = $mypayload['gtw_id'];
$GwTime              = $mypayload['gateways']['time'];
$GwRssi              = $mypayload['gateways']['rssi'];
$GwSnr               = $mypayload['gateways']['snr'];
$GwLatitude          = $mypayload['gateways']['latitude'];
$GwLongitude         = $mypayload['gateways']['longitude'];

$myfile     = fopen("C:/Users/Public/Documents/test2.txt","a+") or die("Unable to open file!");
fwrite($myfile, "App ID = " . $AppID . "n" );
fwrite($myfile, "DevID = " . $DevID . "n" );
fwrite($myfile, "HardwareSerial = " . $HardwareSerial . "n" );
fwrite($myfile, "Counter = " . $Counter . "n" );
fwrite($myfile, "PayloadRaw = " . $PayloadRaw . "n" );
fwrite($myfile, "PayloadFields = " . $PayloadFields . "n" );
fwrite($myfile, "Time    = " . $Time . "n");
fwrite($myfile, "DataRate = " . $DataRate . "n" );
fwrite($myfile, "CodingRate = " . $CodingRate . "n" );
fwrite($myfile, "GtwID = " . $GtwID . "n");
fwrite($myfile, "GwTime = " . $GwTime . "n");
fwrite($myfile, "GwRssi = " . $GwRssi . "n");
fwrite($myfile, "GwSnr = " . $GwSnr . "n");
fwrite($myfile, "GwLatitude = " . $GwLatitude . "n" );
fwrite($myfile, "GwLongitude = " . $GwLongitude . "n" );
fwrite($myfile, "test1 = " . $test1 . "n" );
fclose($myfile);


?>

我知道为什么我会收到此错误,但我无法以我对 PHP 的了解来解决它显然:)

注意:未定义的索引:payload_field E:\xampp7\htdocs\test\test.php 在第 49 行

注意:未定义的索引:在 E:\xampp7\htdocs\test\test.php 中gtw_id 53号线

注意:未定义的索引:E:\xampp7\htdocs\test\test.php 中的网关 54号线

注意:未定义的索引:E:\xampp7\htdocs\test\test.php 中的网关 55号线

注意:未定义的索引:E:\xampp7\htdocs\test\test.php 中的网关 56号线

注意:未定义的索引:E:\xampp7\htdocs\test\test.php 中的网关 57路

注意:未定义的索引:E:\xampp7\htdocs\test\test.php 中的网关 58号线

注意:未定义的变量:E:\xampp7\htdocs\test\test.php 中的 test1 78路

所以帮助是我需要的。提前谢谢。

有几个错误:

  1. 索引必须payload_fields而不是payload_field
  2. 它必须是$mypayload["metadata"]["gateways"]["gtw_id"]而不是$mypayload["gtw_id"]
  3. 它必须是$mypayload["metadata"]["gateways"]而不是$mypayload["gateways"]

等等。

请再次检查您的 JSON。

隐蔽的 json 到数组只json_decode($json_data, TRUE); 比使用 http://php.net/array_walk_recursive 到平面数组到一维数组。

如何展平多维数组?

从那一刻起,它应该是相当向前的。

希望这有帮助。

最新更新