PHP JSON BigInt编码

时间:2015-09-11 19:17:14

标签: php azure

我的数组如下:

$array = ['id' => '76561198165327575'];

我需要它在客户端使用JavaScript。所以我试图用JSON_NUMERIC_CHECK编码:

json_encode($array, JSON_NUMERIC_CHECK);

得到的结果如下:

{"id":7.6561198165328e+16}

但它应该是:

{"id":76561198165327575}

有什么问题?

(Azure,Windows,5.6)

3 个答案:

答案 0 :(得分:2)

JSON_NUMERIC_CHECK基本上告诉编码器“如果它看起来像一个数字,将其编码为数字”:

php > $x = '123456789012234567890';
php > echo json_encode($x, JSON_NUMERIC_CHECK);
1.2345678901223e+20
php > echo json_encode($x);
"123456789012234567890"

由于您的号码超出了平台上INT的可表示范围,因此您将获得一个浮点数。

答案 1 :(得分:0)

您超出了32位系统上的整数范围。 documentation描述了当发生这种情况时,数字将转换为浮点数。

  

如果PHP遇到超出整数类型边界的数字,则会将其解释为float。此外,导致超出整数类型边界的数字的操作将返回浮点数。

答案 2 :(得分:0)

如果您使用大数字(大于PHP_MAX_INT)对JSON对象进行编码,您将始终获得浮点值。唯一的解决方案是将它们作为字符串(您已经)存储在对象/数组中,而不是使用JSON_NUMERIC_CHECK(但将字符串转换为客户端上的数字)或编写自己的编码例程。