JSON.stringify преобразование бесконечности в null
У меня есть JavaScript Object say:
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 в null.
Как решить эту проблему.
Ответы
Ответ 1
Как и другие ответы, Infintity
не является частью значений, которые JSON может хранить как значение.
Вы можете отменить метод цензора при разборе JSON:
var c = JSON.parse(
b,
function (key, value) {
return value === "Infinity" ? Infinity : value;
}
);
Ответ 2
JSON не имеет бесконечности или NaN, см. этот вопрос:
JSON оставил Бесконечность и 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);
Ответ 3
JSON не поддерживает бесконечность /Nan.
Пожалуйста, обратитесь к приведенным ниже ссылкам.
http://www.markhansen.co.nz/inspecting-with-json-stringify/
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify
JSON оставил Бесконечность и NaN; Статус JSON в ECMAScript?
Спасибо,
Шив