我有一个简单的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的新手。我错过了什么吗?
答案 0 :(得分:8)
这是一个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专业版在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。
答案 1 :(得分:2)
Javascript将其数字表示为双精度浮点数,它将可以表示的最大整数数限制为+ -9007199254740992。这是ECMA文档。