使用PHP脚本解析JSON数组

时间:2012-11-07 20:23:07

标签: php json

我尝试读取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...

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

3 个答案:

答案 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