1

有时我在通过 socket.io 2.0 发送 JSON 数据时收到错误“未处理的拒绝错误:整数不安全”。这是发送导致此类错误的推文对象的示例。

示例代码: https ://gist.github.com/whoisstan/dcba1471094b984514c436fd395364e2

我在节点 6.11.2 上使用这些包:

  • "redis": "^2.8.0",
  • "socket.io": "~2.0",
  • “socket.io-redis”:“^5.1.0”

JSON 有效负载是否太大?如果是,如何约束有效载荷?

4

1 回答 1

1

Javasvcript 中的最大安全整数是:

9007199254740991

您的 JSON 包含以下整数:

899068272867328000

这超出了限制。

不需要实际用作数字的东西(这些大数字之一被标记为“id”可能只是用作字符串而不是数字,因此将它们作为字符串而不是数字放入 JSON。

如果这些数据来自 Twitter,这里是 Twitter 开发文档中对这个问题的讨论:Twitter IDs。请注意,JSON 结构提供id_str了一个替代方案,它确实是一个字符串。

而且,根据那篇文章,您需要在解析 JSON 之前对其进行预处理以删除id值,或者您需要获取一个不会抛出带有这些长 id 的异常的解析器,而只是截断它们或将它们转换为nullNaN. 而且,在任何一种情况下,您的代码都需要使用.id_str,而不是.id.

于 2017-08-22T00:11:43.457 回答