json_decode将大数字字符串解码为整数


json_decode decodes large numeric string as integer

我有类似于以下代码的内容:

<?php
$str = "76017060710034014696970658200876993546";
if(json_decode($str) !== null && json_decode($str) !== false){
  var_dump(json_decode($str));
}
?>

结果如下:

int(9223372036854775807)

当然,这不是 json 字符串,我希望json_decode返回 null 或 false,如手册中所述:

返回值

返回以 json 编码的相应 PHP 类型的值。值 真、假和空返回为真、假和空 分别。如果无法解码 json,或者如果 编码数据比递归限制更深。

这怎么可能?这是一个错误还是我错过了什么?

您缺少一个选项JSON_BIGINT_AS_STRING,顺便说一句,字符串是一个有效的json。请尝试以下操作:

var_dump(json_decode($str, false, 512, JSON_BIGINT_AS_STRING));