PHP JSON декодирование-stdClass

У меня был вопрос о принятии 2D JSON string

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

$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 ответов


вы обращаетесь к нему с помощью синтаксиса, подобного массиву:

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]

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

цитата из Docs:

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

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


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

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


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

json_decode($jsonstring, true);

для возврата массива.