本文完整阅读约需 5 分钟,如时间较长请考虑收藏后慢慢阅读~

json_decode()是PHP中一个非常实用的自带函数,然而很多情况下我们使用如下代码,却会报错。
$data = json_decode($json);
var_dump($data["test"]);
报错信息为Cannot use object of type stdClass as array
原因何在呢?

翻阅PHP的官方文档之后,我得到了这样的信息:

mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )

Parameters

json

The json string being decoded.
This function only works with UTF-8 encoded strings.
Note:

PHP implements a superset of JSON as specified in the original » RFC 7159.

assoc

When TRUE, returned objects will be converted into associative arrays.

depth

User specified recursion depth.

options

Bitmask of JSON decode options. Currently there are two supported options. The first is JSON_BIGINT_AS_STRING that allows casting big integers to string instead of floats which is the default. The second option is JSON_OBJECT_AS_ARRAY that has the same effect as setting assoc to TRUE.

问题随之迎刃而解,原来是因为解析出来的数据默认为object对象而非数组,在这里我们遵从了思维惯性,却导致了错误。

解决方法

  • 使用$data->test这样的方式来索引数据
  • 给json_decode()方法添加第二个参数,参数为true

官方文档尽管非常冗长,但是不看还真的是容易出错,谨以自省,也希望这篇文章能帮助到各位。