用PHP脚本解析JSON数组
我尝试读取JSON对象并解析它。我使用的代码如下所示:用PHP脚本解析JSON数组,php,json,Php,Json,我尝试读取JSON对象并解析它。我使用的代码如下所示: <?php $json_string2 = '{"Products":[ {"Size":"klklkkl", "No":"1352285923", "KnowDate":true, "Subdata":[
<?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'};
}
.
.
?>
这个问题的解决方案是什么?有人知道吗?你应该试试
var\u 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
作为“产品”
,而$value
作为产品数组
您可能正在寻找的是foreach($key=>$value的obj['Products')
因为你有数组,而不是对象,所以你需要在循环中的任何地方使用这些方括号。要么传递
true
作为第二个参数,然后使用数组表示法:
$obj = json_decode($json_string2, true);
foreach ($obj['Products'] as $key => $value) {
$size = $value['Size'];
$no = $value['No'];
}
$obj = json_decode($json_string2 /*,false*/ );
foreach ($obj->{'Products'} as $key => $value) {
$size = $value->{'Size'};
$no = $value->{'No'};
}
或传递false
(或不传递第二个参数)并使用对象表示法:
$obj = json_decode($json_string2, true);
foreach ($obj['Products'] as $key => $value) {
$size = $value['Size'];
$no = $value['No'];
}
$obj = json_decode($json_string2 /*,false*/ );
foreach ($obj->{'Products'} as $key => $value) {
$size = $value->{'Size'};
$no = $value->{'No'};
}
注意:您的代码还存在其他问题(i)断开的JSON(ii)没有在正确的键上迭代。JSON无效,因为在结束大括号之前有逗号:
"item" : "1",
},
{
"item" : "455",
}
注意“1”和“455”后面的逗号
即使您纠正了这一点,您也必须循环使用
$obj->Products
您是否尝试过一个好的旧var_转储?var_dump($obj);在你的foreach循环上面。哪一行发出通知?做一个var\u转储($obj)
看看你得到了什么以及如何引用它就在foreach
之前,并发布它返回的内容?可能是在foreach
中,您需要使用$value[''']
而不是$value->{''}
引用属性,这样您就可以看到循环失败的原因了吗?您需要在products数组中循环。。。foreach($obj[products]…)$obj不是一个对象,因为他正在传递到json_encode的第二个参数…@MatthewBlancarte json是无效的,Regardles你不一定需要传递false作为一个参数来将json解码为一个对象。顺便说一句,这个循环将失败。你需要循环通过$obj['prodcuts']在第一个示例中,或第二个示例中的$obj->products。