JSON Not converting long numbers appropriately

风流意气都作罢 提交于 2020-01-19 09:56:26

问题


I have a simple JSON where number is not getting parsed properly.

[
  {
    "orderNumber": 1,
    "customerId": 228930314431312345,
    "shoppingCartId": 22893031443137109,
    "firstName": "jjj"
  }
]

I tried it @ http://www.utilities-online.info/xmltojson/ and the result was

<?xml version="1.0" encoding="UTF-8" ?>
<orderNumber>1</orderNumber>
<customerId>228930314431312350</customerId>
<shoppingCartId>22893031443137108</shoppingCartId>
<firstName>jjj</firstName>

As you can see....the XML is different from JSON. I'm new to JSON. Am I missing something?


回答1:


This is a Javascript precision problem.

According to Mozilla Developer Network:

ECMA-262 only requires a precision of up to 21 significant digits. Other implementations may not support precisions higher than required by the standard.

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

I pasted your array into Google Chrome's Javascript console and got back this:

So it looks like Javascript is rounding the values before they are being converted to XML. Since your conversion is being done via Javascript in the browser at http://www.utilities-online.info/xmltojson/, it makes sense why the number was changed.

(Note: I tested on Google Chrome version 26.0.1410.43 m using Windows 7 Professional)

Edit:

Is there any reason why you cannot pass these values to Javascript as strings?

Try this:

[
  {
    "orderNumber": "1",
    "customerId": "228930314431312345",
    "shoppingCartId": "22893031443137109",
    "firstName": "jjj"
  }
]

I was able to do this and save the values successfully. However, you will not be able to run a math calculation on them in Javascript without losing some precision, unless you are doing something like multiplying by 0, of course.

This also converted to XML correctly using your reference http://www.utilities-online.info/xmltojson/.




回答2:


Javascript represents its numbers as double precision floats which limits the largest integer number that can be represented to +-9007199254740992. Here is the ECMA documentation.



来源:https://stackoverflow.com/questions/15869275/json-not-converting-long-numbers-appropriately

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!