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);