JSON整数:限制大小

时间:2012-11-21 21:34:28

标签: json

是否指定JSON整数有多大?我猜他们只限于正常(32位)整数,但我找不到任何记录下来的东西。我需要编码Java中长的标识符,所以我假设我需要将它们存储为JSON中的字符串,以免冒出溢出。

3 个答案:

答案 0 :(得分:74)

JSON号码不受the spec的限制。

JSON number grammar

由于JSON是一种抽象格式,并非专门针对JavaScript,因此实际目标环境决定了可以解释的边界。

值得注意的是,没有“JSON整数”,它们是“数字”数据类型的子集。

答案 1 :(得分:14)

RFC 7159: The JavaScript Object Notation (JSON) Data Interchange Format

  

此规范允许实现设置范围限制      和接受的数字的精确度。自从实现的软件      IEEE 754-2008二进制64(双精度)数字[IEEE754]是      一般可用并广泛使用,良好的互操作性即可      通过期望不再精确或范围的实现来实现      从实现的角度来看,这些提供了      在预期精度内近似JSON数字。一个JSON      诸如1E400或3.141592653589793238462643383279之类的数字可能表示      潜在的互操作性问题,因为它暗示了      创建它的软件希望接收软件有更大的功能      数字量级和精度的能力比广泛      可用。

答案 2 :(得分:6)

我刚刚使用Chrome(Mac上的v.23)控制台进行了以下实证测试:

> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]")
undefined

> j[0]
1e+228

如果通过HTTP传递JSON,那么在任何情况下,该数字都将从Java转换为String,然后问题只能在Javascript中。

来自ECMAScript Language Specification 4.3.19

  

4.3.19数值

     

对应于双精度64位二进制的原始值   格式IEEE 754值

     

注意Number值是Number类型的成员,是直接的   代表一个数字。

wikipedia Double-precision floating-point format中定义的内容。