me_*_*jay 15 javascript json infinity stringify
我有JavaScript对象说:
var a = {b: Infinity, c: 10};
Run Code Online (Sandbox Code Playgroud)
当我做
var b = JSON.stringify(a);
Run Code Online (Sandbox Code Playgroud)
它返回以下内容
b ="{"b":null,"c":10}";
JSON.stringify如何将对象转换为字符串?
我尝试过MDN解决方案.
function censor(key, value) {
if (value == Infinity) {
return "Infinity";
}
return value;
}
var b = JSON.stringify(a, censor);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我必须返回字符串"Infinity" Infinity
.如果我返回Infinity,它会再次将Infinity转换为null.
我该如何解决这个问题.
Koo*_*Inc 11
与所述的其他答案一样,Infintity
不是JSON可以存储为值的值的一部分.
您可以在解析JSON时反转censor方法:
var c = JSON.parse(
b,
function (key, value) {
return value === "Infinity" ? Infinity : value;
}
);
Run Code Online (Sandbox Code Playgroud)
JSON没有Infinity或NaN,请看这个问题:
JSON遗漏了Infinity和NaN; ECMAScript中的JSON状态?
因此{ b: Infinity, c: 10 }
是无效的JSON.如果需要在JSON中编码无穷大,则可能需要求助于对象:
{
"b": { "is_infinity": true, "value": null },
"c": { "is_infinity": false, "value": 10 }
}
Run Code Online (Sandbox Code Playgroud)
这个结构是由上面的例子做的,你说它做了什么,
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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6465 次 |
最近记录: |