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.
JSON. stringify() throws an error when it detects a cyclical object. In other words, if an object obj has a property whose value is obj , JSON. stringify() will throw an error.
There is no way to represent Infinity or NaN in JSON. There is a very strict syntax for numbers, and Infinity or NaN is not part of it.
JSON. stringify will omit all object attributes that are undefined .
JSON. parse is the opposite of JSON. stringify .
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With