1

当我在 PHP 中尝试以下操作时:

var_dump(json_decode("123"));

var_dump(json_decode("true"));

我期望的是:

NULL

NULL

但我实际得到的是:

int(123)

bool(true)

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

谢谢。

4

3 回答 3

1

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

于 2013-09-12T14:26:58.737 回答
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"
于 2013-09-12T14:27:29.413 回答
0

两个结果都是对的。

string(4) "true"

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

于 2013-09-12T14:25:40.673 回答