json_decode(“true”)应该返回什么?

时间:2013-09-12 14:22:27

标签: php json

当我在PHP中尝试以下内容时:

var_dump(json_decode("123"));

var_dump(json_decode("true"));

我的期望是:

NULL

NULL

但实际得到的是:

int(123)

bool(true)

“123”和“true”应该被视为有效的JSON字符串吗?或者它是json_decode()的实现中的错误?

感谢。

3 个答案:

答案 0 :(得分:1)

它们不是有效的JSON文本,但json_decode函数被记录为能够处理JSON的片段。

答案 1 :(得分:1)

请记住,JSON基本上只是javascript,实际上只是一个纯文本字符串。 PHP和Javascript都有truefalse常量:

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"

答案 2 :(得分:0)

两种结果都是对的。

string(4) "true"

作为JavaScript字符串应该转换回bool(true)。字符串(3)“123”也是如此。