Я маю об'єкт 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?
Дякую,
Шива