web-dev-qa-db-ja.com

配列へのjson_decode

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']);
?>
362
Harsha M V

ドキュメンテーション に従って、json_decodeのオブジェクトではなく連想配列が必要かどうかを指定する必要があります。これがコードになります。

json_decode($jsondata, true);
749
Stephen

これを試して

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
38
diEcho

これは最近の投稿ですが、json_decode(array)とキャストするのに有効なケースがあります。
次の点を考慮してください。

$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
    echo $v; // etc.
}

$jsondataが空の文字列として返された場合(私の経験ではよくあることですが)、json_decodeNULLを返し、結果としてエラー警告:3行目のforeach()に無効な引数が指定されましたを返します。 if/thenコードまたは3項演算子の行を追加することもできますが、IMOでは2行目を単純に変更する方がわかりやすいでしょう...

$arr = (array) json_decode($jsondata,true);

... @ TCB13で指摘されているように、一度に数百万もの大規模な配列をjson_decodeingしているのでない限り、パフォーマンスに悪影響を及ぼす可能性があります。

22
neokio

これも配列にそれを変更します:

<?php
    print_r((array) json_decode($object));
?>
6
coreyavis

万が一、5.2より前のphpで作業している場合は、このリソースを使用できます。

http://techblog.willshouse.com/2009/06/12/using-json_encode-and-json_decode-in-php4/ /

http://mike.teczno.com/JSON/JSON.phps

6
Anuj Pandey

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)
}
3
Arosha De Silva

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!
3
Arjun Kariyadan
json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

したがって、配列が必要な場合は、json_decode関数で2番目の引数を「true」として渡すことができます。

2
Shanu Singh

これを試してください

<?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
}
1
lalithkumar

PHP json_decodeでjsonデータをPHP関連付けられた配列に変換
例:$php-array= json_decode($json-data, true); print_r($php-array);

1
Salman Mohammad