PHP JSON декодирование - stdClass - PullRequest
12 голосов
/ 02 ноября 2010

У меня был вопрос о создании 2D строки JSON

Теперь я хотел бы знать, почему я не могу получить доступ к следующему:

$json_str = '{"urls":["http://example.com/001.jpg","http://example.com/003.jpg","http://example.com/002.jpg"],"alts":["testing int chars àèéìòóù stop","second description",""],"favs":["true", "false", "false"]}';

$j_string_decoded = json_decode($json_str);
// echo print_r($j_string_decoded); // OK

// test get url from second item
echo j_string_decoded['urls'][1];
// Fatal error: Cannot use object of type stdClass as array

Ответы [ 3 ]

24 голосов
/ 02 ноября 2010

Вы обращаетесь к нему с использованием синтаксиса, похожего на массив:

echo j_string_decoded['urls'][1];

Принимая во внимание, что объект возвращается.

Преобразуйте его в массив, указав второй аргумент true:

$j_string_decoded = json_decode($json_str, true);

Как сделать это:

$json_str = '{"urls":["http://site.com/001.jpg","http://site.com/003.jpg","http://site.com/002.jpg"],"alts":["testing int chars àèéìòóù stop","second description",""],"favs":["true", "false", "false"]}';

$j_string_decoded = json_decode($json_str, true);
echo j_string_decoded['urls'][1];

Или Попробуйте это:

$j_string_decoded->urls[1]

Обратите внимание на оператор ->, используемый для объектов.

Цитированиеиз документов:

Возвращает значение, закодированное в json в соответствующем типе PHP.Значения true, false и null (без учета регистра) возвращаются как TRUE, FALSE и NULL соответственно.NULL возвращается, если json не может быть декодирован или если закодированные данные глубже, чем предел рекурсии.

http://php.net/manual/en/function.json-decode.php

7 голосов
/ 02 ноября 2010

json_decode по умолчанию превращает словари JSON в объекты PHP, поэтому вы получите доступ к своему значению как $j_string_decoded->urls[1]

Или вы можете передать дополнительный аргумент как json_decode($json_str,true), чтобы он возвращал ассоциативные массивы, которые затем будут совместимы с $j_string_decoded['urls'][1]

5 голосов
/ 02 ноября 2010

Использование:

json_decode($jsonstring, true);

чтобы вернуть массив.

...