Javascript JSON.stringify将无穷大转换为null

Javascript JSON.stringify将无穷大转换为null,javascript,json,infinity,stringify,Javascript,Json,Infinity,Stringify,我要说: var a = {b: Infinity, c: 10}; 当我这样做的时候 var b = JSON.stringify(a); 它返回以下内容 b=“{”b:null,“c:10}” JSON.stringify如何将对象转换为字符串 我试过了 但是在这种情况下,我必须返回字符串“Infinity”,而不是Infinity。如果我返回无穷大,它会再次将无穷大转换为null 如何解决此问题。JSON没有无穷大或NaN,请参见以下问题: 因此,{b:Infinity,c:10}不

我要说:

var a = {b: Infinity, c: 10};
当我这样做的时候

var b = JSON.stringify(a);
它返回以下内容

b=“{”b:null,“c:10}”

JSON.stringify如何将对象转换为字符串

我试过了

但是在这种情况下,我必须返回字符串“Infinity”,而不是
Infinity
。如果我返回无穷大,它会再次将无穷大转换为null


如何解决此问题。

JSON没有无穷大或NaN,请参见以下问题:

因此,
{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);

JSON不支持无穷大/Nan

请参考以下链接

谢谢


Siva

与前面提到的其他答案一样,
infinity
不是JSON可以存储为值的值的一部分

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

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

我总是可以这样做的,但最好是得到无穷大而不是“无穷大”,因为我不需要对数百个具有数百个属性的对象执行此附加检查。正如我在回答中所写的,包含
无穷大
(不带引号)作为值的JSON文件将不是有效的JSON。您不应该编写不符合标准的JSON文件。@DigvijayYadav,我担心您将不得不接受野兽的本性。也许在某些使用情况下,可以使用另一个低或高的数字:
number.MIN\u SAFE\u INTEGER
number.MAX\u SAFE\u INTEGER
var c = JSON.parse(
          b,
          function (key, value) {
            return value === "Infinity"  ? Infinity : value;
          }
        );