I have JavaScript Object say:
var a = {b: Infinity, c: 10};
When I do
var b = JSON.stringify(a);
it returns the following
b = "{"b":null, "c":10}";
How is the JSON.stringify converts the object to strings?
I tried MDN Solution.
function censor(key, value) {
if (value == Infinity) {
return "Infinity";
}
return value;
}
var b = JSON.stringify(a, censor);
But in this case I have to return the string "Infinity" not Infinity
. If I return Infinity it again converts Infinity to null.
How do I solve this problem.
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;
}
);
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);
JSON doesn't support infinity/Nan.
Please refer the below links.
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?
Thanks,
Siva