用PHP脚本解析JSON数组

用PHP脚本解析JSON数组,php,json,Php,Json,我尝试读取JSON对象并解析它。我使用的代码如下所示: <?php $json_string2 = '{"Products":[ {"Size":"klklkkl", "No":"1352285923", "KnowDate":true, "Subdata":[

我尝试读取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'};
}
.
.
?>

这个问题的解决方案是什么?有人知道吗?

你应该试试
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。