有没有什么方法json_decode可以返回一个不是数组的类型,如果$ assoc设置为true,则返回null?

时间:2012-09-23 19:59:10

标签: php

我正在使用php的json_decode来解码一些json,但是我已经得到了/ var / log / apache / error_log:PHP致命错误:不能将字符串偏移用作数组

$data = json_decode($this->body, true);
if (is_null($data))
{
    throw new Exception(...);
}
...
$foo = $data['foo']['bar']; // this line causes the fatal error
...

根据一些研究,导致错误的唯一方法是$ data是一个字符串。但由于带有$ assoc = to true的json_decode似乎保证null或数组,所以不应该这样。任何人都可以想到该代码如何可能导致错误吗?

1 个答案:

答案 0 :(得分:1)

当然json_decode可以返回其他类型,$assoc与其无关。

$a = json_encode('foobar'); // returned JSON: "foobar"
$b = json_decode($a, true); // $b is a string

$a = json_encode(true); // returned JSON: true
$b = json_decode($a, true); // $b is a boolean

$assoc = true仅表示JSON中的对象(关联数组)将被解码为PHP关联数组,而默认情况下将它们解码为PHP对象。它不会影响JSON中的任何其他类型的数据,因此如果您的根JSON元素不是数组,json_decode也将返回非数组。