json_decode для массива - PullRequest
       5

json_decode для массива

372 голосов
/ 02 марта 2011

Я пытаюсь декодировать строку 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']);
?>

Ответы [ 11 ]

770 голосов
/ 02 марта 2011

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

json_decode($jsondata, true);
41 голосов
/ 02 марта 2011

попробуйте

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);
24 голосов
/ 04 февраля 2014

Это поздний вклад, но есть действительный случай для каста 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);

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

6 голосов
/ 06 ноября 2013

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

<?php
    print_r((array) json_decode($object));
?>
6 голосов
/ 06 июня 2012

На всякий случай, если вы работаете с 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

3 голосов
/ 30 марта 2018

В соответствии с PHP-документацией json_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 голосов
/ 24 октября 2017

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!
2 голосов
/ 03 февраля 2017

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

<?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']);
?>
1 голос
/ 17 июня 2019
json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

Итак, если вам нужен массив, вы можете передать второй аргумент как 'true' в json_decode функцию.

1 голос
/ 12 мая 2017

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

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