JSON.stringify converting Infinity to null

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, Infinity 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.



JSON left out Infinity and NaN; JSON status in ECMAScript?



Read More:   Converting Object to Array using ES6 features

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Similar Posts