JSON.stringify 将 Infinity 转换为 null
Posted
技术标签:
【中文标题】JSON.stringify 将 Infinity 转换为 null【英文标题】:JSON.stringify converting Infinity to null 【发布时间】:2013-05-14 17:17:33 【问题描述】:我有 javascript 对象说:
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。
我该如何解决这个问题。
【问题讨论】:
也许对于某些用例,使用另一个低或高的数字就可以了:Number.MIN_SAFE_INTEGER
或 Number.MAX_SAFE_INTEGER
【参考方案1】:
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】:JSON 不支持 infinity/Nan。
请参考以下链接。
http://www.markhansen.co.nz/inspecting-with-json-stringify/
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify
JSON left out Infinity and NaN; JSON status in ECMAScript?
谢谢,
湿婆
【讨论】:
【参考方案3】:与其他答案一样,Infintity
不是 JSON 可以存储为值的值的一部分。
您可以在解析 JSON 时反转审查方法:
var c = JSON.parse(
b,
function (key, value)
return value === "Infinity" ? Infinity : value;
);
【讨论】:
我总是可以做到这一点,但最好获得 Infinity 而不是“Infinity”,因为我不需要对具有数百个属性的数百个对象执行此额外检查。 正如我在回答中所写,包含Infinity
(不带引号)作为值的 JSON 文件将不是有效的 JSON。您不应该编写不符合标准的 JSON 文件。
@DigvijayYadav,我担心你将不得不忍受野兽的本性。以上是关于JSON.stringify 将 Infinity 转换为 null的主要内容,如果未能解决你的问题,请参考以下文章
强制 JSON.stringify() 发出这样做的 NaN / Infinity 或 JS JSON 库