JSON.stringify将Infinity转换为null

时间:2013-05-20 07:27:41

标签: javascript json infinity stringify

我有JavaScript Object说:

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转换为null。

如何解决此问题。

3 个答案:

答案 0 :(得分:10)

与所述的其他答案一样,Infintity不是JSON可以存储为值的值的一部分。

您可以在解析JSON时反转censor方法:

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

答案 1 :(得分:6)

JSON没有Infinity或NaN,请看这个问题:

JSON left out Infinity and NaN; JSON status in 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)