JSON文字列を配列にデコードしようとしていますが、次のエラーが発生します。
致命的なエラー:6行目のC:\ wamp\www\temp\asklaila.phpの配列としてstdClass型のオブジェクトを使用できません
これがコードです:
<?php
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>
ドキュメンテーション に従って、json_decode
のオブジェクトではなく連想配列が必要かどうかを指定する必要があります。これがコードになります。
json_decode($jsondata, true);
これを試して
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
これは最近の投稿ですが、json_decode
を(array)
とキャストするのに有効なケースがあります。
次の点を考慮してください。
$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
echo $v; // etc.
}
$jsondata
が空の文字列として返された場合(私の経験ではよくあることですが)、json_decode
はNULL
を返し、結果としてエラー警告:3行目のforeach()に無効な引数が指定されましたを返します。 if/thenコードまたは3項演算子の行を追加することもできますが、IMOでは2行目を単純に変更する方がわかりやすいでしょう...
$arr = (array) json_decode($jsondata,true);
... @ TCB13で指摘されているように、一度に数百万もの大規模な配列をjson_decode
ingしているのでない限り、パフォーマンスに悪影響を及ぼす可能性があります。
これも配列にそれを変更します:
<?php
print_r((array) json_decode($object));
?>
万が一、5.2より前のphpで作業している場合は、このリソースを使用できます。
http://techblog.willshouse.com/2009/06/12/using-json_encode-and-json_decode-in-php4/ /
PHP Documentationjson_decode
関数によれば、返されたオブジェクトを連想配列に変換する assoc という名前のパラメータがあります。
mixed json_decode ( string $json [, bool $assoc = FALSE ] )
assoc パラメータはデフォルトでFALSE
なので、配列を取得するにはこの値をTRUE
に設定する必要があります。
例の意味については、以下のコードを調べてください。
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
どの出力:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
json_decode
は2番目の引数をサポートし、TRUE
に設定するとstdClass Object
の代わりにArray
を返します。サポートされているすべての引数とその詳細を確認するには、json_decode
関数の Manual ページを確認してください。
例えば、これを試してください:
$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE
print_r($obj['Result']); // Now this will works!
json_decode($data, true); // Returns data in array format
json_decode($data); // Returns collections
したがって、配列が必要な場合は、json_decode
関数で2番目の引数を「true」として渡すことができます。
これを試してください
<?php
$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, true);
echo "<pre>"; print_r($obj['Result']);
?>
このようにしてみてください:
$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj->Result);
foreach($obj->Result as $value){
echo $value->id; //change accordingly
}
PHP json_decodeでjsonデータをPHP関連付けられた配列に変換
例:$php-array= json_decode($json-data, true); print_r($php-array);