在json_decode
的PHP文档中,它说它可以返回TRUE
,FALSE
,NULL
。
有些人可以帮助我了解它何时返回FALSE
?我理解无效的JSON将返回NULL
,但是如果不是实际的JSON值,那么何时会返回其他两个?
由于
答案 0 :(得分:6)
JSON format definition清楚地显示了所有可能的值及其表示形式:
值可以是双引号中的字符串,也可以是数字,或
true
或false
或null
,或对象或数组。
对象和数组在JSON表示中都有特殊语法(分别包含在{}
和[]
中),因此在任何情况下它们都不能与false
混淆。字符串也是如此 - 它包含在""
(双引号)中。至于Numbers,它们必须包含至少一个数字 - 所以不能与false
(以及true
和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
值,但来源明显不同。
如果您仍然不相信,请检查json_decode
的{{3}},检查参数后调用the source code。反过来,这首先调用php_json_decode_ex,它在预定义的parse_JSON_ex上运行;后者只有一组状态导致false
值。如果此调用以某种方式失败,则会检查值state transition table:
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设置为boolean的唯一情况。
答案 1 :(得分:0)
文档说values true, false and null (case-insensitive) are returned as TRUE, FALSE and NULL respectively.
这意味着,如果布尔值true
或false
位于要编码的对象中,则会显示为TRUE
或{{ 1}},和null一样。例如:
FALSE
将返回:
json_decode('["hello",true]');
这并不意味着["hello",TRUE]
会返回json_decode
,true
或false