php json解码号码问题

时间:2011-11-04 07:51:59

标签: php json

我在php json解码号码中遇到了一些麻烦。

$json = '[{"num":123456789011121314},{"num":1516171819202122232425}]';
$number = json_decode($json);
foreach($number as $num){
    echo $num->num.'<br />';
    //echo (int)$num->num.'<br />';
}

这将得到:

1.23456789011E+17
1.5161718192E+21

另外(int)做错了回调。如何获得原始数字?感谢。

我需要

123456789011121314    
1516171819202122232425

3 个答案:

答案 0 :(得分:4)

如果您使用的是PHP 5.4或更高版本,则可以执行以下操作:

$number = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);

将表示那些大数字表示为字符串而不是整数。如果您可以访问生成json的代码,您还可以将数字编码为字符串。

答案 1 :(得分:1)

由于json结构并不复杂,我们可以使用简单的正则表达式来修复它。我们的想法是将数字括在双引号中。

$json = '[{"num":123456789011121314},{"num":1516171819202122232425}]';
$sanitized = preg_replace('/:(\w*\d+)/', ':"$1"', $json);
$number = json_decode($sanitized);

这对你来说应该和我一样好。

模式匹配冒号后跟一些可选的空格后跟一个数字。

答案 2 :(得分:0)

使用128位系统?

第二个数字大于64位机器可以保持整数,因此它被转换为浮点数。提示精度损失和指数部分。

另一种解决方案:使用较小的数字。

如果您绝对必须拥有这些数字,请查看BC-MathGMP等API。