декодирование JSON в массив

Я пытаюсь декодировать строку JSON в массив, но получаю следующую ошибку.

фатальная ошибка: невозможно использовать объект типа stdClass как массив в C:\wamp\www\temp\asklaila.PHP на линии 6

вот код:

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>

10 ответов


по состоянию на документация, вам нужно указать, хотите ли вы ассоциативный массив вместо объекта из 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, что приводит к ошибке предупреждение: недопустимый аргумент для foreach () в строке 3. Вы можете добавить строку кода if / then или троичного оператора, но IMO чище просто изменить строку 2 на ...

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

... если только ты не ... --2-->ing миллионы больших массивов сразу, и в этом случае, как указывает @TCB13, производительность может быть отрицательно сказана.


на случай, если вы работаете на php меньше 5.2, вы можете использовать этот ресурс.

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

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


Это также изменит его в массив:

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

json_decode поддержка второго аргумента, когда он установлен в TRUE вернет Array вместо stdClass Object. Проверьте руководство страница json_decode функция, чтобы увидеть все поддерживаемые Аргументы и его детали.

, например:

$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!

по словам PHP документации json_decode функция имеет параметр с именем assoc которые преобразуют возвращаемые объекты в ассоциативные массивы

 mixed json_decode ( string $json [, bool $assoc = FALSE ] )

С assoc


пожалуйста, попробуйте это

<?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']);
?>

в PHP json_decode преобразуйте данные json в связанный с PHP массив
Например: $php-array= json_decode($json-data, true); print_r($php-array);


попробуйте так:

$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
}