为什么在漂亮打印时返回 JSON 的大数字?

Why are returned JSON's big numbers rounded when pretty-printed?

我正在使用 ASP.NET 从数据库中获取一些数据的核心 Web 应用程序和 returns 序列化为 JSON 的数据传输对象。我注意到,当数据包含一个大数字(例如 70679185527693127)时,该数字在打印时会四舍五入。我使用浏览器开发工具(Firefox 和 Chrome)检查了返回的 JSON,原始数据是正确的,但在漂亮打印时不正确。我还尝试使用 this website 漂亮地打印 JSON,结果仍然相同。出于某种原因,这是我的 Kendo 网格的一个问题,我试图在其中显示数据,因为它显示了错误的舍入数据。这是为什么?我必须避免使用这么大的数字吗?

这是非常简化的 JSON:

{"Data":[{"Id":70679185527693127}],"Total":1}

这是印刷精美的版本:

{
  "Data": [
    {
      "Id": 70679185527693130
    }
  ],
  "Total": 1
}

查看值的差异。

编辑: 将值作为字符串传递按预期工作(至少使用提到的网站)。还有一个附带问题:为什么 Kendo 网格显示漂亮的打印数据而不是解析看起来正确的原始数据?

漂亮的打印是通过JSON.parse() + JSON.stringify()实现的。

您的 ID 值超过 Number.MAX_SAFE_INTEGER,因此 JSON.parse() 可能会解析出不正确的值。
我假设 Kendo 也使用 JSON.parse(),因此也会显示错误的值。

另请参阅了解更多信息