是否在任何地方指定了 JSON 整数的大小?我猜它们仅限于普通(32位)整数,但我找不到任何写下来的地方。我需要在 Java 中对长的标识符进行编码,所以我认为我需要将它们作为字符串存储在 JSON 中,以免有溢出的风险。
3 回答
JSON 编号不受规范的限制。
由于 JSON 是一种抽象格式,并非专门针对 JavaScript,实际的目标环境决定了可以解释的边界。
还值得注意的是,没有“JSON 整数”,它们是“数字”数据类型的子集。
RFC 7159:JavaScript 对象表示法 (JSON) 数据交换格式
该规范允许实现对接受的数字的范围和精度设置限制。由于实现 IEEE 754-2008 binary64(双精度)数字 [IEEE754] 的软件普遍可用并被广泛使用,因此可以通过不期望比这些提供的精度或范围更高的实现来实现良好的互操作性,在某种意义上,实现将近似于 JSON预期精度内的数字。JSON 数字(例如 1E400 或 3.141592653589793238462643383279)可能表示潜在的互操作性问题,因为它表明创建它的软件期望接收软件具有比广泛可用的更大的数字量级和精度功能。
我刚刚使用 Chrome(Mac 上的 v.23)控制台进行了以下实证测试:
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]")
undefined
> j[0]
1e+228
如果 JSON 通过 HTTP 传递,那么无论如何该数字都会从 Java 转换为字符串,然后问题可能仅存在于 Javascript 中。
4.3.19 数值
对应于双精度 64 位二进制格式 IEEE 754 值的原始值
注意 Number 值是 Number 类型的成员,是数字的直接表示。
这是维基百科双精度浮点格式中定义的内容。