【问题标题】:Is a JSON number tied to JavaScript's Number?JSON 数字是否与 JavaScript 的数字相关联?
【发布时间】:2016-02-04 04:56:32
【问题描述】:

JSON 中数字的大小是否有任何限制?这不是我说的 JavaScript,而是 JSON。

JSON 与 JavaScript 如此相关——但仅仅因为一个数字不符合 JavaScript 对 Number 的看法,这是否会使 JSON 无效?

例如,JSON 可以容纳 Java Long 吗?

【问题讨论】:

  • 在什么平台上/用什么实现?
  • 没有规范限制:一百万位数字似乎是有效的 JSON。
  • @ElliottFrisch - 提示问题的是 Elasticsearch from Java,它是 Java 到 Java,但通过 JSON。
  • 那么问题就变成了:Elasticsearch 使用的 JSON 解析器能否识别 JSON 中的 long(因为 long 不能在不损失精度的情况下放入 double 中)。我不知道答案,但如果你使用 Elasticsearch 应该不难测试。
  • @Amadan - 这就是提示的问题。我让它工作;但它让我思考......

标签: javascript java json


【解决方案1】:

来自RFC 7159

本规范允许实现对范围设置限制 和接受的数字的精度。由于软件实现 IEEE 754-2008 binary64(双精度)数字 [IEEE754] 是 普遍可用和广泛使用,良好的互操作性可以 通过不期望更高的精度或范围的实现来实现 比这些提供的,在某种意义上,实现将 在预期精度内的近似 JSON 数字。一个 JSON 1E4003.141592653589793238462643383279 等数字可能表示 潜在的互操作性问题,因为它表明 创建它的软件期望接收软件具有更大的 数值幅度和精度的能力比广泛 可用。

请注意,当使用此类软件时,整数和数字 在[-(2**53)+1, (2**53)-1] 范围内可互操作 感觉实现将完全同意他们的数字 价值观。

tl;dr:建议您使用可互操作(双精度)但不是必需的数字。

【讨论】:

    【解决方案2】:

    在 JSON 中,数字将表示为字符串。如果数字太大(我认为超过 53 位)并且您尝试将字符串转换为 JavaScript 中的数字,则会发生意想不到的事情。但是,如果 Java(或任何其他支持 64 位数字的语言)将字符串转换为适当的数字类型,您将获得预期的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多