当我在PHP中尝试以下操作时:
var_dump(json_decode("123"));
var_dump(json_decode("true"));
我的期望是:
NULL
NULL
但我实际得到的是:
int(123)
bool(true)
"123"和"true"应该被视为有效的JSON字符串吗?还是 json_decode() 实现中的错误?
谢谢。
它们不是有效的 JSON 文本,但 json_decode
函数被记录为能够处理 JSON 片段。
请记住,JSON基本上只是javascript,实际上只是一个纯文本字符串。PHP 和 Javascript 都有true
常量和false
常量:
php > var_dump(json_decode(true)); // php constant "true", maps to int 1
int(1)
php > var_dump(json_decode('true')); // php string / javascript constant true
bool(true)
php > var_dump(json_decode('"true"')); // json-encoded string "true"
string(4) "true"
您的"123"
可能是PHP字符串,这会导致一些奇怪的问题:
php > var_dump(json_encode(123));
string(3) "123"
php > var_dump(json_encode("123"));
string(5) ""123"" // not quite what you'd expect.
php > var_dump(json_encode('123'));
string(5) ""123"" // also somewhat unexpected
php > var_dump(json_decode(123));
int(123)
php > var_dump(json_decode('123'));
int(123)
php > var_dump(json_decode('"123"'));
string(3) "123"
两个结果都是正确的。
string(4) "true"
因为 JavaScript 字符串应该转换回 bool(true)。字符串(3) "123" 也是如此。