Подтвердить что ты не робот

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.

Как решить эту проблему.

4b9b3361

Ответ 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);