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 не может быть декодирован или если закодированные данные глубже, чем предел рекурсии.
json_decode
по умолчанию превращает словари JSON в объекты PHP, поэтому вы получите доступ к своему значению как $j_string_decoded->urls[1]
или вы можете передать дополнительный аргумент как json_decode($json_str,true)
чтобы он возвращал ассоциативные массивы, которые затем были бы совместимы с $j_string_decoded['urls'][1]