1

PHP の json_decode を使用して一部の json をデコードしていますが、 /var/log/apache/error_log:PHP Fatal error: Cannot use string offset as an array が発生しています

$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 または配列を保証しているように見えるので、そうではありません。そのコードがどのようにエラーを引き起こす可能性があるか、誰でも考えられますか?

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 = trueJSON 内のオブジェクト(連想配列) が PHP 連想配列としてデコードされることのみを意味しますが、デフォルトでは PHP オブジェクトとしてデコードされます。JSON 内の他のタイプのデータには影響しないため、ルート JSON 要素が配列でない場合、json_decodeも非配列を返します。

于 2012-09-23T20:04:53.913 に答える