我有一个简单的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的新手。我想念什么吗?
这是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。
JavaScript将其数字表示为双精度浮点数,它限制了可以表示为+ -9007199254740992的最大整数。这是ECMA文档。