json_decode для массива

272

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

Неустранимая ошибка: нельзя использовать объект типа stdClass как массив в C:\wamp\www\temp\asklaila.php on line 6

Вот код:

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

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>
  • 0
    Это сработало бы, если бы вместо этого вы использовали $ob->Result .
Теги:
arrays

9 ответов

546
Лучший ответ

По документации, вам нужно указать, хотите ли вы ассоциативный массив вместо объекта из json_decode, это будет код:

json_decode($jsondata, true);
  • 3
    Возникает вопрос: каковы преимущества его возврата в виде массива, а не объекта?
  • 39
    Это поднимает вопрос. «Задать вопрос» означает принять то, что еще предстоит доказать ( см. ). В любом случае преимущество может заключаться в том, что OP удобнее обходить массивы, чем объекты, или что некоторый другой, уже реализованный код, требует массива.
Показать ещё 5 комментариев
31

попробуйте это

$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
9

Это поздний вклад, но существует допустимый случай для литья 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 code или trernary operator, но IMO это чище, чтобы просто изменить строку 2 на...

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

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

5

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

<?php
    print_r((array) json_decode($object));
?>
  • 6
    Это пустая трата ЦП / памяти, как и предлагалось json_decode($object, true); true делает то же самое, внутренне намного быстрее.
  • 1
    @ TCB13 за исключением тех случаев, когда вам нужны оба, и вы не хотите снова выполнять декодирование
Показать ещё 3 комментария
5

На всякий случай, если вы работаете с php less than 5.2, вы можете использовать этот ресурс.

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

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

2

json_decode поддерживать второй аргумент, когда он установлен в TRUE, он вернет Array вместо stdClass Object. Проверьте Manual страницу 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!
1

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

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

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

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

в PHP json_decode конвертировать json-данные в связанный с PHP массив
Для Ex: $php-array= json_decode($json-data, true); print_r($php-array);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню