15

我有一个简单的 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 新手。我错过了什么吗?

4

2 回答 2

15

这是一个 Javascript 精度问题。

根据 Mozilla 开发者网络:

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

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

我将您的数组粘贴到 Google Chrome 的 Javascript 控制台中,然后返回: Javascript 精度错误

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

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

编辑:

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

试试这个:

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

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

Javascript 精确字符串解决方法

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

于 2013-04-08T00:05:32.383 回答
5

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

于 2014-09-13T11:46:15.617 回答