12

我有一个关于制作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
4

3 回答 3

27

您正在使用类似数组的语法访问它:

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]

注意->用于对象的运算符。

引用文档:

以适当的 PHP 类型返回以 json 编码的值。值 true、false 和 null(不区分大小写)分别返回为 TRUE、FALSE 和 NULL。如果无法解码 json 或编码的数据深度超过递归限制,则返回 NULL。

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

于 2010-11-02T18:16:01.583 回答
7

json_decode默认情况下,将 JSON 字典转换为 PHP 对象,因此您可以将值访问为$j_string_decoded->urls[1]

或者您可以传递一个附加参数json_decode($json_str,true)以使其返回关联数组,然后与$j_string_decoded['urls'][1]

于 2010-11-02T18:16:46.027 回答
6

利用:

json_decode($jsonstring, true);

返回一个数组。

于 2010-11-02T18:15:09.460 回答