JSON不适当地转换长数字

时间:2013-04-07 23:55:35

标签: json numbers converter

我有一个简单的JSON,其数字未被正确解析。

[
  {
    "orderNumber": 1,
    "customerId": 228930314431312345,
    "shoppingCartId": 22893031443137109,
    "firstName": "jjj"
  }
]

我试了@ http://www.utilities-online.info/xmltojson/,结果是

<?xml version="1.0" encoding="UTF-8" ?>
<orderNumber>1</orderNumber>
<customerId>228930314431312350</customerId>
<shoppingCartId>22893031443137108</shoppingCartId>
<firstName>jjj</firstName>

正如您所看到的...... XML与JSON不同。我是JSON的新手。我错过了什么吗?

2 个答案:

答案 0 :(得分:8)

这是一个Javascript精度问题。

根据Mozilla开发者网络的说法:

  

ECMA-262仅需要高达21位有效数字的精度。其他实现可能不支持高于标准要求的精度。

来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision

我将您的数组粘贴到Google Chrome的Javascript控制台中并获得了以下信息: Javascript precision bug

因此看起来Javascript在将值转换为XML之前将其四舍五入。由于您的转换是通过浏览器http://www.utilities-online.info/xmltojson/中的Javascript完成的,因此更改数字的原因很有意义。

(注意:我使用Windows 7专业版在Google Chrome版本26.0.1410.43 m上进行了测试)

修改

有什么理由不能将这些值作为字符串传递给Javascript吗?

试试这个:

[
  {
    "orderNumber": "1",
    "customerId": "228930314431312345",
    "shoppingCartId": "22893031443137109",
    "firstName": "jjj"
  }
]

我能够做到这一点并成功保存值。但是,您将无法在Javascript中对它们运行数学计算而不会丢失一些精度,当然,除非您正在执行类似于0的操作。

Javascript precision string workaround

这也使用您的引用http://www.utilities-online.info/xmltojson/正确转换为XML。

答案 1 :(得分:2)

Javascript将其数字表示为双精度浮点数,它将可以表示的最大整数数限制为+ -9007199254740992。这是ECMA文档。