是否指定JSON整数有多大?我猜他们只限于正常(32位)整数,但我找不到任何记录下来的东西。我需要编码Java中长的标识符,所以我假设我需要将它们存储为JSON中的字符串,以免冒出溢出。
答案 0 :(得分:74)
JSON号码不受the spec的限制。
由于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类型的成员,是直接的 代表一个数字。