嗨,我的Json格式如下:
{
"result":0,
"status":[
{
"id":"00001",
"vid":"yes"
},
{
"id":"00002",
"vid":"yes"
},
{
"id":"00003",
"vid":"no"
}
]
}
我想在PHP中使用json_decode
函数来解码id
值,如下所示:
00001
00002
00003
这是我使用的代码:
$url = file_get_contents("URL");
foreach(json_decode($url, true) as $key=>$value){
foreach($value->status[0] as $key1=>$value1){
echo $value1->id;
}
}
据我所知,问题似乎出在status[0]
上,而使用status[0]
是选择status
键的唯一方法。但是我无法使循环正常工作。
我收到错误消息:Trying to get property of non-object
意味着status[0]
在Json数组中找不到status
,但是我不知道为什么会这样,因为当我提取类似这样的值时它会起作用:< br />
$id = $url->status[0]->id;
如果有人有任何建议,我将不胜感激。谢谢
答案 0 :(得分:2)
我从json数据中删除了一些逗号。
代码:演示:https://3v4l.org/C1Mda
$json = '{"result":0,"status":[{"id":"00001"},{"id":"00002"},{"id":"00003"}]}';
foreach(json_decode($json, true)['status'] as $status){
echo $status['id'] , "\n";
}
输出:
00001
00002
00003
因为您使用的是json_decode的true
参数,所以会生成一个数组。您需要使用方括号语法。
或者您可以使用对象:
foreach(json_decode($json)->status as $status){
echo $status->id , "\n";
}
答案 1 :(得分:1)
您的JSON无效,外观{“ id”:“ 00001”,} 并且json_decode($ json,false)应该是
工作解决方案:
$json = '{
"result":0,
"status":[{"id":"00001"},
{"id":"00002"},
{"id":"00003"}
]
}';
$data = json_decode($json, false);
foreach ($data->status as $status){
echo $status->id;
}
答案 2 :(得分:1)
您可以只使用array_column
从JSON的const
元素中提取id
值(一旦通过删除多余的逗号对其进行了纠正):
status
输出:
$ids = array_column(json_decode($json, true)['status'], 'id');
print_r($ids);