我尝试读取JSON对象并解析它。我正在使用的代码如下:
<?php
$json_string2 = '{"Products":[
{"Size":"klklkkl",
"No":"1352285923",
"KnowDate":true,
"Subdata":[
{
"item" : "1",
},
{
"item" : "455",
}],
"Info":true
}]
}';
$obj = json_decode($json_string2, true);
foreach($obj as $key => $value)
{
$size = $value->{'Size'};
$no = $value->{'No'};
$knowdate = $value->{'KnowDate'};
$info = $value->{'Info'};
}
.
.
?>
但在进入for循环的行中,我收到以下错误:
Notice: Trying to get property of non-object in C:\xampp\htdocs\PhpProject2\parseJson.php on line...
这个问题的解决方案是什么?有人知道吗?
答案 0 :(得分:2)
将true
作为第二个参数传递给json_decode
函数并使用数组表示法:
$obj = json_decode($json_string2, true);
foreach ($obj['Products'] as $key => $value) {
$size = $value['Size'];
$no = $value['No'];
}
或传递false
(或不传递第二个参数)并使用对象表示法:
$obj = json_decode($json_string2 /*,false*/ );
foreach ($obj->{'Products'} as $key => $value) {
$size = $value->{'Size'};
$no = $value->{'No'};
}
注意:您的代码存在其他问题(i)损坏的JSON(ii)没有在正确的密钥上进行迭代。
答案 1 :(得分:1)
您应该尝试var_dump
。您将获得以下结构:
array(1) {
["Products"]=>
array(1) {
[0]=>
array(5) {
["Size"]=>
string(7) "klklkkl"
["No"]=>
string(10) "1352285923"
["KnowDate"]=>
bool(true)
["Subdata"]=>
array(2) {
[0]=>
array(1) {
["item"]=>
string(1) "1"
}
[1]=>
array(1) {
["item"]=>
string(3) "455"
}
}
["Info"]=>
bool(true)
}
}
}
当您使用foreach
进行迭代时,$key
为"Products"
,$value
为产品数组。
您可能正在寻找的是foreach($obj['Products'] as $key=>$value)
因为你有数组,而不是对象,你需要在循环内的任何地方使用这些方括号。
答案 2 :(得分:0)
JSON无效,因为在关闭大括号之前有逗号:
"item" : "1",
},
{
"item" : "455",
}
请注意“1”和“455”之后的逗号
即使您更正了这一点,也必须循环$obj->Products
。