JSON不适当地转换长数字

Jee*_*eet 11 json numbers converter

我有一个简单的JSON,其中数字未被正确解析.

[
  {
    "orderNumber": 1,
    "customerId": 228930314431312345,
    "shoppingCartId": 22893031443137109,
    "firstName": "jjj"
  }
]
Run Code Online (Sandbox Code Playgroud)

我试过@ 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>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的...... XML与JSON不同.我是JSON的新手.我错过了什么吗?

Aii*_*ias 8

这是一个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专业版在Google Chrome版本26.0.1410.43米上进行了测试)

编辑:

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

试试这个:

[
  {
    "orderNumber": "1",
    "customerId": "228930314431312345",
    "shoppingCartId": "22893031443137109",
    "firstName": "jjj"
  }
]
Run Code Online (Sandbox Code Playgroud)

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

Javascript精确字符串解决方法

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


Dav*_*ber 5

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

  • 修复了一段时间 (2认同)