【问题标题】:json_decode decodes large numeric string as integerjson_decode 将大数字字符串解码为整数
【发布时间】:2015-01-23 11:58:28
【问题描述】:

我有类似下面的代码:

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

结果如下:

int(9223372036854775807)

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

返回值

以适当的 PHP 类型返回以 json 编码的值。价值观 true、false 和 null 返回为 TRUE、FALSE 和 NULL 分别。如果无法解码 json 或 编码数据比递归限制更深。

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

【问题讨论】:

    标签: php json integer


    【解决方案1】:

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

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

    【讨论】:

    • 我收到此错误:致命错误: json_decode() [function.json-decode3]:选项 JSON_BIGINT_AS_STRING 未在 /path/to/file125 中实现 如何安装此选项?我使用 PHP 版本 => 5.5.9-1ubuntu4.5
    • php v5.2及以上应该可以用,我有phpv5.4.31See Jason decode manual
    • 是的,我知道,所以我的配置不对?有没有办法手动安装这个选项?
    • 我不知道是否可以只将这个选项安装到您当前的 php.ini 文件中。我建议卸载这个版本并安装最新版本,如果我没记错的话,你可以在 ubuntu 中使用 apt-get 来做到这一点(我在 windows 上工作)。
    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2020-07-05
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多