-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関数に2番目のパラメーターとして渡しjson_decode、配列表記を使用します。

$obj = json_decode($json_string2, true);
foreach ($obj['Products'] as $key => $value) {
    $size = $value['Size'];
    $no   = $value['No'];
}

または、パスfalse(または2番目のパラメーターを渡さない)して、オブジェクト表記を使用します。

$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取得されます。$key"Products"$value

あなたがおそらく探しているのは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 に答える