JSON.parse错误地解析/转换大数字

Sim*_*mon 9 javascript floating-point json numbers

我的问题很简单,但我不确定是否有使用JSON.parse的"原生"解决方案.

我从API 收到这个字符串:

{ "key" : -922271061845347495 }
Run Code Online (Sandbox Code Playgroud)

当我在这个字符串上使用JSON.parse时,它变成了这个对象:

{ "key" : -922271061845347500 }
Run Code Online (Sandbox Code Playgroud)

如您所见,解析在数字太长时停止(您可以在此处检查此行为).它只有15个确切的数字,最后一个是四舍五入的,后面的那些被设置为0.是否有一个"原生"解决方案来保持确切的值?(这是一个ID所以我不能围绕它)

我知道我可以使用正则表达式来解决这个问题,但如果它存在,我宁愿使用"原生"方法.

Sal*_*n A 16

您假设解析在某些数字后停止不正确.

在这里说:

在JavaScript中,所有数字都是浮点数.JavaScript使用标准的8字节IEEE浮点数字格式,这意味着范围来自:

±1.7976931348623157 x 10 308 - 非常大,±5 x 10 -324 - 非常小.

由于JavaScript使用浮点数,因此只能保证以下整数的准确性:-9007199254740992(-2 53)和9007199254740992(2 53)

您的数字位于"准确"范围之外,因此它将转换为最接近的JavaScript编号.任何评估此数字的尝试(使用JSON.parse,eval,parseInt)都会导致数据丢失.因此,我建议您将密钥作为字符串传递.如果您不控制API,请提交功能请求.