我知道如何解码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链接。 https://pastebin.com/cewszSZD
答案 0 :(得分:1)
您提供的JSON(在您的问题中)格式不正确,并在其上使用json_decode()
将导致NULL
。因此,当您尝试访问已解码的对象时,不会发生任何事情,因为它不存在。
您提供的完整JSON是有效的,并且您的代码未产生任何结果的原因是因为在items
中存在“内部” - 阵列:
(...)
["items"] => array(1) {
[0] => array(4) {
// ^^^^^^^^^^^^^^^^^
["update_timestamp"] => string(25) "2017-05-02T09:21:18+08:00"
["timestamp"] => string(25) "2017-05-02T09:07:00+08:00"
["valid_period"] => array(2) {
["start"] => string(25) "2017-05-02T09:00:00+08:00"
["end"] => string(25) "2017-05-02T11:00:00+08:00"
}
["forecasts"] => array(47) {
[0] => array(2) {
["area"] => string(10) "Ang Mo Kio"
["forecast"] => string(19) "Partly Cloudy (Day)"
}
(...)
您必须通过键0
访问该数组,对于数组,它将如下所示:
$data = json_decode($json, true);
echo $data['items'][0]['forecasts'][0]['area'];
// ^^^
对于像这样的对象:
$data = json_decode($json);
echo $data->items[0]->forecasts[0]->area;
// ^^^
第二个0
更改位置(forecasts
数组中的不同数组)。
答案 1 :(得分:0)
如果您发布所有JSON数据或链接到它的屏幕截图,将会更容易提供帮助。试试:
$items[0]['locations'][0]['area'];
字符串上的单引号,数字上没有引号。