JSON无法正确转换长数字

问题描述 投票:12回答:2

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

json numbers converter
2个回答
10
投票

这是Javascript精度问题。

根据Mozilla开发人员网络:

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

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

我将您的数组粘贴到Google Chrome浏览器的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"
  }
]

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9tVzRWWi5wbmcifQ==” alt =“ Javascript精度字符串的解决方法”>

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


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.