PHP のドキュメントには、 , ,json_decode
を返すことができると書かれています。TRUE
FALSE
NULL
いつ戻るかを理解するのに役立つものはありFALSE
ますか?無効な JSON が返されることは理解していますNULL
が、実際の JSON 値でない場合、他の 2 つはいつ返されますか?
ありがとう
PHP のドキュメントには、 , ,json_decode
を返すことができると書かれています。TRUE
FALSE
NULL
いつ戻るかを理解するのに役立つものはありFALSE
ますか?無効な JSON が返されることは理解していますNULL
が、実際の JSON 値でない場合、他の 2 つはいつ返されますか?
ありがとう
JSON 形式の定義は、すべての可能な値とその表現を明確に示しています。
値は、二重引用符で囲まれた文字列、数値、 または
true
または 、false
またはnull
オブジェクトまたは配列にすることができます。
オブジェクトと配列はどちらも、JSON 表現に特別な構文 (それぞれ と でラップされ{}
て[]
いる) を持っているため、どのような場合でも混同することはできませんfalse
。同じことが文字列にも当てはまります - ""
(二重引用符) で囲まれています。数字に関しては、少なくとも 1 桁の数字が含まれている必要があるため、false
(andtrue
およびnull
) と混同することはできません。
つまり、json_encode が JSON 表現を再定義したオブジェクトを処理する場合です。例 (PHP 5.4+):
class FalsyFoo implements JsonSerializable {
public $foo;
public function __construct($f) {
$this->foo = $f;
}
public function jsonSerialize() {
return false;
}
}
$f = new FalsyFoo(true);
$fj = json_encode($f);
var_dump( $fj ); // string(5) 'false'
var_dump( json_decode($fj) ); // bool(false)
技術的には、false
ここでも値を使用しますが、ソースは明らかに異なります。
それでも納得できない場合は、引数を確認した後にphp_json_decode_exを呼び出すのソース コードを確認してください。次に、これは最初にparse_JSON_exを呼び出します。これは、事前定義された状態遷移テーブルを操作します。後者には、結果として価値につながる状態のセットが 1 つしかありません。この呼び出しが何らかの理由で失敗した場合、値は直接チェックされます:json_decode
false
if (str_len == 4) {
if (!strcasecmp(str, "null")) {
/* We need to explicitly clear the error
because its an actual NULL and not an error */
jp->error_code = PHP_JSON_ERROR_NONE;
RETVAL_NULL();
} else if (!strcasecmp(str, "true")) {
RETVAL_BOOL(1);
}
} else if (str_len == 5 && !strcasecmp(str, "false")) {
RETVAL_BOOL(0);
}
... return_value がブール値に設定されている場合はこれだけです。
ドキュメントによると、values true, false and null (case-insensitive) are returned as TRUE, FALSE and NULL respectively.
これは、ブール値true
またはfalse
がエンコードされるオブジェクトにある場合、それらはTRUE
orとして表示されFALSE
、null の場合も同じであることを意味します。例えば:
json_decode('["hello",true]');
戻ります:
["hello",TRUE]
、、またはjson_decode
の値を返すという意味ではありませんtrue
false
null