JSON.stringify converting Infinity to null
Solution 1:
Like the other answers stated, Infintity
is not part of the values JSON can store as value.
You can reverse the censor method on parsing the JSON:
var c = JSON.parse(
b,
function (key, value) {
return value === "Infinity" ? Infinity : value;
}
);
Solution 2:
JSON doesn't have Infinity or NaN, see this question:
JSON left out Infinity and NaN; JSON status in ECMAScript?
Hence { b: Infinity, c: 10 }
isn't valid JSON. If you need to encode infinity in JSON, you probably have to resort to objects:
{
"b": { "is_infinity": true, "value": null },
"c": { "is_infinity": false, "value": 10 }
}
This structure is generated by, given your above example does what you say it does,
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);