Skip to content Skip to sidebar Skip to footer

Force Json.stringify() To Emit Nan / Infinity Or Js Json Lib That Does So

I'm looking into the feasibility of adding NaN/Infinity support to a pre-existing scientific application that uses JSONRPC for client/server interactions. Many JSON libs do handle

Solution 1:

Here is an example

Javascript

var array1 = [-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity],
    json = JSON.stringify(array1, function (key, value) {
        if (value !== value) {
            return'NaN';
        }

        if (value === Infinity) {
            return'Infinity';
        }

        if (value === -Infinity) {
            return'-Infinity';
        }

        return value;
    }),
    array2 = JSON.parse(json, function (key, value) {
        if (value === 'NaN') {
            return NaN;
        }

        if (value === 'Infinity') {
            return Infinity;
        }

        if (value === '-Infinity') {
            return -Infinity;
        }

        return value;
    });

console.log(json);
console.log(array2);

Output

["-Infinity",-1,0,1,2,"NaN",4,5,"Infinity"][-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity]

References

JSON.stringify

JSON.parse

On jsFiddle

Update:

Javascript

var array1 = [-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity],
    json = JSON.stringify(array1, function (key, value) {
        if (value !== value) {
            return'0/0';
        }

        if (value === 1/0) {
            return'1/0';
        }

        if (value === -1/0) {
            return'-1/0';
        }

        return value;
    }),
    array2 = JSON.parse(json, function (key, value) {
        if (value === '0/0') {
            return0/0;
        }

        if (value === '1/0') {
            return Infinity;
        }

        if (value === '-1/0') {
            return -1/0;
        }

        return value;
    });

console.log(json);
console.log(array2);

Output

["-1/0",-1,0,1,2,"0/0",4,5,"1/0"][-Infinity, -1, 0, 1, 2, NaN, 4, 5, Infinity]

On jsFiddle

Solution 2:

replacement parameter of JSON.stringify is quite right tool for the job.

JSON.stringify(data, function(key, value) {
   if (value === Infinity) {
      return"Infinity";
   } elseif (value === -Infinity) {
      return"-Infinity";
   } elseif (value !== value) {
      return"NaN";
   }
   return value;
});

And on the other side you can use reviver parameter of JSON.parse.

 JSON.parse(data, function(key, value) {
   if (value === "Infinity") {
      return Infinity;
   } elseif (value === "-Infinity") {
      return -Infinity;
   } elseif (value === "NaN") {
      return NaN;
   }
   return value;
});

Post a Comment for "Force Json.stringify() To Emit Nan / Infinity Or Js Json Lib That Does So"