Javascript - конвертирование EXTRA LARGE Number в строку в JSON перед анализом по умолчанию - PullRequest
0 голосов
/ 27 октября 2018

Как я уже упоминал в ЭТОМ ВОПРОСЕ , у меня проблема при получении ответа от сервера.

Я получаю массив объектов со следующими атрибутами:

[{
"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(), но я понятия не имею, какиспользуйте это ...

ОБНОВЛЕНИЕ

Один из этих идентификаторов: 9481703061634967, но JS преобразует это в 9481703061634968!

ОБНОВЛЕНИЕ

Как Джонас Х сказал в этом ответе , JS запускает разбор по умолчанию , и поэтому я теряю свойреальное Id значение!

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 27 октября 2018

Преобразуйте ответ в string, затем примените перерасчет с регулярным выражением, чтобы преобразовать поле 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)
});
0 голосов
/ 27 октября 2018

Предполагая, что вы получаете данные в виде строки Json с числами внутри них, невозможно сохранить данные с помощью JSON.parse. Даже если вы используете второй аргумент для добавления функции преобразования, он будет запущен только после того, как при разборе по умолчанию проанализировал числа с потерей информации в случае больших чисел. Вам нужно напрямую манипулировать строкой, чтобы заключить число в кавычки, например, используя регулярное выражение.

Вы также можете использовать пакет json-bigint npm: https://www.npmjs.com/package/json-bigint

0 голосов
/ 27 октября 2018

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.

Отзывы приветствуются.

0 голосов
/ 27 октября 2018

вы можете использовать replacer в 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...