Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解码多层嵌套JSON字符串并在PHP中显示?_Php_Json - Fatal编程技术网

如何解码多层嵌套JSON字符串并在PHP中显示?

如何解码多层嵌套JSON字符串并在PHP中显示?,php,json,Php,Json,我知道如何解码JSON字符串并从一维数组中获取数据,但如何从嵌套数组中获取数据? 下面是我的代码: $data = json_decode($json); 下面是JSON返回值: { "area_metadata": [ { "name": "A", "label_location": { "latitude": 1, "longitude": 1 }

我知道如何解码JSON字符串并从一维数组中获取数据,但如何从嵌套数组中获取数据? 下面是我的代码:

$data = json_decode($json);
下面是JSON返回值:

{
      "area_metadata": [
        {
          "name": "A",
          "label_location": {
            "latitude": 1,
            "longitude": 1
          }
        },
        {
          "name": "B",
          "label_location": {
            "latitude": 1,
            "longitude": 1
          }
        }   
      ],
     "items": [
            {
              "update_timestamp": "2017-05-02T09:51:20+08:00",
              "timestamp": "2017-05-02T09:31:00+08:00",
              },
              "locations": [
                {
                  "area": "A",
                  "weather": "Showers"
                },
                {
                  "area": "B",
                  "weather": "Cloudy"
                }
              ]
            }
        ]}
我测试过:

echo $data->items->locations[0]->area;
但我犯了这个错误

Trying to get property of non-object
此外,我尝试将JSON转换为数组而不是对象:

$data = json_decode($json,true);


if (isset($data)) 
{
    foreach ($data->items->locations as $location) 
    {
            if (empty($location["area"])) { continue; }
            if ($location["area"] == "A") 
            {
                echo $location["weather"];

            }


    }
}
但它也不起作用

谁能告诉我哪一步我做得不对? 谢谢

编辑: 下面是包含完整JSON内容的pastebin链接。

如果您发布所有JSON数据或链接到该数据的屏幕截图,将更容易提供帮助。尝试:

$items[0]['locations'][0]['area'];
字符串上使用单引号,数字上不使用引号

您(在您的问题中)提供的JSON格式不正确,在其上使用
JSON\u decode()
将导致
NULL
。因此,当您尝试访问解码对象时,不会发生任何事情,因为它不存在

您提供的完整JSON是有效的,您的代码没有产生任何结果的原因是因为在
items
中有一个“内部”数组:

您必须通过键
0
访问该数组,对于数组,它将如下所示:

$data = json_decode($json, true);
echo $data['items'][0]['forecasts'][0]['area'];
//                 ^^^
$data = json_decode($json);
echo $data->items[0]->forecasts[0]->area;
//               ^^^
对于这样的对象:

$data = json_decode($json, true);
echo $data['items'][0]['forecasts'][0]['area'];
//                 ^^^
$data = json_decode($json);
echo $data->items[0]->forecasts[0]->area;
//               ^^^
第二个
0
更改位置(
预测
数组中的不同数组)


您可以检查输出(数组方法)和(对象方法)。

您的JSON似乎格式不正确,您确定这正是您试图解码的JSON字符串吗?由于JSON格式错误,解码可能“失败”。不回答我的问题无助于解决您的问题。如果你不能一直在这里,我理解,但如果你能早点回复,人们会很感激的。我漏掉了一个“}”,只是把它添加回JSON数据中。谢谢。我没有将整个JSON数据粘贴在这里,因为它很长,但整体结构类似。@TomUdding谢谢您的及时回复。我住在亚洲时区,现在已经午夜了,我会尽快回复。您可以将所有区域放置在一个数组中:
$areas=array();foreach($data['items']作为$area)$areas[]=$area['forecast'][0]['area']