Javascript - 在默认解析之前将 EXTRA LARGE Number 转换为 JSON 中的字符串

IT技术 javascript json reactjs react-native ecmascript-6
2021-05-14 21:51:22

正如我在这个问题中提到的,从服务器获取响应时遇到问题。

我收到一组具有以下属性的对象:

[{
"Id": 143187001116603,   // VERY big number which I want to convert it to string
"Name": "تملی612",   // string
"Title": "تسهیلات مسکن بانک ملی-اسفند96",   // string
"InsCode": "IRO6MELZ96C1"   // string
},
...
]

任何简单的方法来指定类型(转换Number),以string在一个JSON文件?

我看到了replacer论点,JSON.stringify()但我不知道如何使用它...

更新

其中一个 Id 是:9481703061634967但是 JS 将其转换为9481703061634968!

更新

正如乔纳斯 H这个答案中所说,JS 运行默认解析,这就是为什么我失去了我的真正Idvalue!

任何的想法?

4个回答

将响应转换为string,然后使用正则表达式应用 repalce 将Id字段转换为字符串类型:

const axios = require('axios');

axios.get(url, { transformResponse: [data => data] }).then(response => {
  let parsed = JSON.parse(response.data.replace(/"Id":(\d+),/g, '"Id":"$1",'));
  console.log(parsed);
});

假设您以 Json 字符串的形式接收数据,其中包含数字,则无法使用 JSON.parse 保留数据。即使您使用第二个参数来添加转换函数,它也只会在默认解析已经解析了大量丢失信息的数字后运行。您需要直接操作字符串以使用正则表达式将数字括在引号中。

你也可以使用 json-bigint npm 包:https ://www.npmjs.com/package/json-bigint

您可以在 JSON.stringify() 中使用替换器,例如:

var obj  = {
"Id": 143187001116603,   // VERY big number which I want to convert it to string
"Name": "تملی612",   // string
"Title": "تسهیلات مسکن بانک ملی-اسفند96",   // string
"InsCode": "IRO6MELZ96C1"   // string
};


function replacer(name, val) {
    // convert Number to string
    if ( val && val.constructor === Number ) {
        return val.toString();
    } else {
        return val; // return as is
    }
};

 JSON.stringify(obj, replacer, 4);

// 结果

{
    "Id": "143187001116603",
    "Name": "تملی612",
    "Title": "تسهیلات مسکن بانک ملی-اسفند96",
    "InsCode": "IRO6MELZ96C1"
}

function replacer(key, value) {
  // Filtering out properties
  if (key === 'Id') {
    return value.toString();
  }
  return value;
}

const t = [{
    "Id": 143187001116603, // VERY big number which I want to convert it to string
    "Name": "تملی612", // string
    "Title": "تسهیلات مسکن بانک ملی-اسفند96", // string
    "InsCode": "IRO6MELZ96C1" // string
  },
  {
    "Id": 9481703061634967, // VERY big number which I want to convert it to string
    "Name": "تملی232", // string
    "Title": "تسهیلات مسکن بانک ملی-اسفن216", // string
    "InsCode": "IRO6MSDZ96C1" // string
  }
]
const stringifiedValue = JSON.stringify(t, replacer)
console.log(JSON.parse(stringifiedValue))

尝试使用 JSON.stringify 的替换器回调。

欢迎反馈。