我有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。
如何解决此问题。
答案 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)