-3

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

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

4

3 回答 3

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)没有迭代正确的键。

于 2012-11-07T20:27:30.510 回答
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,您将获得$keyas"Products"$valueas 产品数组。

您可能正在寻找的是foreach($obj['Products'] as $key=>$value)

而且因为你有数组,而不是对象,所以你需要在循环内的任何地方使用这些方括号。

于 2012-11-07T20:27:24.157 回答
0

JSON 无效,因为在右大括号之前有逗号:

   "item" : "1",
 },
 {
    "item" : "455",
 }

注意“1”和“455”后面的逗号

即使您更正了这一点,您也必须遍历$obj->Products.

于 2012-11-07T20:30:04.073 回答