1

我正在使用 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 = 为 true 的 json_decode 似乎可以保证 null 或数组,因此不应如此。谁能想到该代码如何可能导致错误?

4

1 回答 1

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 = trueonly 表示将 JSON 中的对象(关联数组)解码为 PHP 关联数组,而默认将其解码为 PHP 对象。它不会影响 JSON 中的任何其他类型的数据,因此如果您的根 JSON 元素不是数组,则json_decode也将返回非数组。

于 2012-09-23T20:04:53.913 回答