【问题标题】:JSON Not converting long numbers appropriatelyJSON 未正确转换长数字
【发布时间】:2013-03-29 22:55:10
【问题描述】:

我有一个简单的 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 新手。我错过了什么吗?

【问题讨论】:

    标签: json numbers converter


    【解决方案1】:

    这是一个 Javascript 精度问题。

    根据 Mozilla 开发者网络:

    ECMA-262 只需要最多 21 位有效数字的精度。其他实现可能不支持高于标准要求的精度。

    来源: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。

    【讨论】:

    • 我在 IE 9 和 Chrome 上试过。基本上,我试图从我的 Spring MVC 控制器获取 JSON 响应并且得到无效值。我使用 XML 转换器只是为了显示请求/响应。谢谢!我试过 gson 和 jackson。
    • @Jeet - 查看我的编辑。我找到了一种可能对您有用的解决方法。
    • 嗯..我可以将它们作为字符串传递,但这不是手动干预吗?我希望有一个开箱即用的解决方案。
    • @Jeet - 在 Javascript 中创建 Numeric 的大值时,它会失去精度。
    • @Jeet - 你是如何生成 JSON 的?
    【解决方案2】:

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

    【讨论】:

    • 链接已损坏。
    • 修复了一段时间
    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 2010-09-22
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多