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