我有一个简单的 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 only requires a precision of up to 21 significant digits. Other implementations may not support precisions higher than required by the standard.
来源:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision
我将您的数组粘贴到 Google Chrome 的 Javascript 控制台中并得到了这个:
因此,看起来 Javascript 在将值转换为 XML 之前会对其进行四舍五入。由于您的转换是通过浏览器中的 Javascript 完成的,地址为 http://www.utilities-online.info/xmltojson/ ,这说明为什么更改了数字。
(注:我使用 Windows 7 Professional 在 Google Chrome 版本 26.0.1410.43 m 上进行了测试)
编辑:
有什么理由不能将这些值作为字符串传递给 Javascript?
尝试这个:
[
{
"orderNumber": "1",
"customerId": "228930314431312345",
"shoppingCartId": "22893031443137109",
"firstName": "jjj"
}
]
我能够做到这一点并成功保存值。但是,您将无法在 Javascript 中对它们进行数学计算而不会损失一些精度,除非您正在执行乘以 0 之类的操作,当然。
这也使用您的引用 http://www.utilities-online.info/xmltojson/ 正确转换为 XML .
关于JSON 未正确转换长数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869275/