如何在 Javascript 中处理 JSON 响应中的大整数

How to handle big integer numbers in JSON response in Javascript

我正在使用 Java脚本和 ExtJS 框架开发 Web 应用程序。

我需要找到以下问题的通用解决方案 -

在我为员工提供数据的应用程序中,我调用了服务器 api,这给了我员工数据的 json 响应 -

服务器响应:{"id":10765432100123456789,"id_str":“10765432100123456789”,"name":"Employee1"}

现在在客户端,我正在使用 ExtJS ajax 调用,它调用服务器并通过将响应文本转换为对象来给出响应。

但是当我检查对象时,我注意到 id 键的值更改为不同的数字,而 id_str 键的值保持不变。

当我试图找到根本原因时,我开始了解 javascript 数字限制(Java脚本最多支持 53 位整数)。

现在,在我完整的应用程序中,我使用 ID 密钥来引用员工 ID。现在我不想去每个地方并更改代码以引用 id_str 的 id 值。

注意 - 在我的应用程序中,Employee 是我引用的一个对象,但我已经在 id 键上为大约 20 多个对象编写了代码。

谁能指导我处理这种情况的最佳解决方案。

我正在考虑按以下方式重写 JSON.parse(ExtJS 内部使用此函数将 json 字符串转换为对象)函数 -

var oldFN = JSON.parse;


JSON.parse = function(){
    var jsonStrParam = arguments[0];
    //TODO Read jsonStrParam and write custom logic to convert id integer values to string values 
    var reviverFuncParam = null;
    if(arguments.length == 2)
        reviverFuncParam = arguments[1];
    return oldFN(jsonStrParam,reviverFuncParam);  
}

在我上面的方法中,我必须编写代码将 id 整数值转换为字符串值,然后将其交给解析函数。

我认为这会导致性能问题,因为我已经解析了字符串并对其进行了迭代,并将每个键的整数值更改为字符串值。

谁能帮我弄清楚我需要编写什么来处理 javascript 端的大整数的最佳解决方案。

是否应该在客户端(浏览器javascript)端或服务器端(Java DAO 层)处理?

我遇到了同样的问题。在我的应用程序中,ID 被传递到客户端并且仅用于引用数据(例如,我从未增加或减少它或以任何其他方式依赖它是一个 数字 )。

所以我所做的是在 JSON:

中发送修改后的 ID
{
    "id" : "id#10765432100123456789",
    "name" : "Employee1"
}

然后在输入端我设置了一个过滤器,如果参数值以 "id#" 开头,则去除前三个字符并将其余字符转换为 int64_t.

由于 Javascript 方的 ID 现在以 id# 开头,它始终被视为字符串。问题已解决。

如果在选择器中使用它,您可能希望使用 __id__ 之类的前缀而不是 id#:

$('#__id__10765432100123456789').css({ backgroundColor: "red" });