/ / JSON.stringify перетворення Infinity в null - javascript, json, infinity, stringify

JSON.stringify перетворення Infinity в null - javascript, json, infinity, stringify

Я маю об'єкт JavaScript, кажу:

var a = {b: Infinity, c: 10};

Коли я роблю

var b = JSON.stringify(a);

він повертає наступне

b = "{" b ": null," c ": 10)";

Як JSON.stringify перетворює об'єкт на рядки?

я намагався MDN Solution.

function censor(key, value) {
if (value == Infinity) {
return "Infinity";
}
return value;
}
var b = JSON.stringify(a, censor);

Але в цьому випадку я повинен повернути рядок "Infinity" не Infinity. Якщо я повертаю Infinity, це знову перетворює Infinity на нуль.

Як вирішити цю проблему?

Відповіді:

10 за відповідь № 1

Як і інші відповіді, Infintity не є частиною значень JSON може зберігати як значення.

Ви можете змінити метод цензури при аналізі JSON:

var c = JSON.parse(
b,
function (key, value) {
return value === "Infinity"  ? Infinity : value;
}
);

6 для відповіді № 2

JSON не має Infinity або NaN, дивіться це питання:

JSON видалив Infinity і NaN; Стан JSON в ECMAScript?

Отже { b: Infinity, c: 10 } не дійсний JSON. Якщо вам потрібно закодовати нескінченність у JSON, вам, мабуть, доведеться вдаватися до об'єктів:

{
"b": { "is_infinity": true, "value": null },
"c": { "is_infinity": false, "value": 10 }
}

Ця структура генерується, якщо вказаний вище приклад робить те, що ви говорите, це робить.

function censor(key, value) {
if (value == Infinity) {
return JSON.stringify ( { is_infinity: true, value: null } );
} else {
return JSON.stringify ( { is_infinity: false, value: value } );
}
}
var b = JSON.stringify(a, censor);

2 для відповіді № 3

JSON не підтримує нескінченність / Нан.

Будь ласка, зверніть увагу на посилання нижче.

http://www.markhansen.co.nz/inspecting-with-json-stringify/

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

JSON видалив Infinity і NaN; Стан JSON в ECMAScript?

Дякую,

Шива