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

使用PHP从复杂的JSON负载中获取所有键值对,php,json,payload,Php,Json,Payload,我从服务器收到了一个JSON文件,它在任何时候都不能更改。 我试图使用PHP获得所有key:value对,但我的成功是部分的 有人因为我还找不到答案而处理这种麻烦吗 正如你所看到的,我做了一些编码 <?php $content = ('{ "app_id": "test1", "dev_id": "temperature", "hardware_serial": "0056748F03A5C6CB1", "port": 1, "counter":

我从服务器收到了一个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_字段 第49行的E:\xampp7\htdocs\test\test.php

注意:未定义的索引: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行


所以我需要帮助。提前感谢。

有几个错误:

  • 索引必须是
    payload\u字段
    ,而不是
    payload\u字段
  • 它必须是
    $mypayload[“metadata”][“gateways”][“gtw_id”]
    而不是
    $mypayload[“gtw_id”]
  • 它必须是
    $mypayload[“metadata”][“gateways”]
    而不是
    $mypayload[“gateways”]
  • 等等


    请再次检查您的json。

    将json转换为仅数组json_解码($json_数据,TRUE);而不是将数组平面化为一维数组

    从那时起,它应该是相当海峡前进


    希望这能有所帮助。

    您需要跟踪到“终点”的路径,可以说,例如,
    $mypayload['gtw_id']应该是:
    $mypayload['metadata']['gateways']['gtw_id']您可能需要的其他“端点”的相同逻辑。您还有一个输入错误
    $mypayload['payload_field']应该是
    $mypayload['payload_fields']您有一个小的输入错误。。。而不是
    $mypayload[“qtw_id”]
    应该是而不是
    $mypayload[“gtw_id”]
    谢谢您的帮助。那是我度假前的几天,所以我太不知所措了,我没有看到明显的拼写错误:)很好。我将尝试这种方法,它似乎在未来的项目中更有用