是否在任何地方指定了多大的JSON整数?我猜想它们仅限于普通(32位)整数,但是我找不到任何记录下来的东西。我需要对在Java中长的标识符进行编码,所以我想我需要将它们存储为JSON中的字符串,以免冒溢出的风险。
Answers:
JSON编号不受规范限制。
由于JSON是一种抽象格式,并非专门针对JavaScript,因此实际的目标环境确定了可解释内容的边界。
还值得注意的是,没有“ JSON整数”,它们是“ Number”数据类型的子集。
[-(2**53)+1, (2**53)-1]
。)如果您在该范围之外工作,则要么使用字符串编码的整数,要么期望实现失去精度。
RFC 7159:JavaScript对象表示法(JSON)数据交换格式
该规范允许实现对接受的数字的范围和精度设置限制。由于实现IEEE 754-2008 binary64(双精度)数字[IEEE754]的软件通常可用并得到广泛使用,因此,在期望实现的精度或范围不超过这些实现的范围内,可以实现良好的互操作性。预期精度内的数字。诸如1E400或3.141592653589793238462643383279之类的JSON数字可能表示潜在的互操作性问题,因为它表明创建它的软件期望接收软件具有比广泛使用的更大的数字幅度和精度功能。
json
模块)可以解析任意整数,甚至可以解析超过64位(内置bignums)的整数。
我刚刚使用Chrome(在Mac上为v.23)控制台进行了以下实证测试:
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]")
undefined
> j[0]
1e+228
如果JSON是通过HTTP传递的,则无论如何该数字都将由Java转换为String,那么问题可能仅在于Javascript。
4.3.19数值
对应于双精度64位二进制格式IEEE 754值的原始值
注意Number值是Number类型的成员,并且是数字的直接表示。