Keys with undefined value are missing when converting to JSON

Ran into a quirk with JSON.stringify() recently. If you have an object with some keys of value undefined, they will be omitted when converting to JSON:

var obj = { a: 1, b: undefined };
JSON.stringify(obj); // -> "{"a":1}"

I’m sure there’s a good reason for this (it’s in the spec after all), but I had some data that needed those keys to be conserved. Luckily there’s an optional second parameter you can pass to JSON.stringify(), a replacer function, which can be used to modify the data before it’s encoded to JSON.

If we create a quick function to replace all undefined values with null:

var replacer = function(key, value) {
  return value === undefined ? null : value;
}

And call JSON.stringify() again with our replacer function as second parameter:

JSON.stringify(obj, replacer); // -> "{"a":1,"b":null}"

All our keys are now preserved.

Leave a Reply

Your email address will not be published. Required fields are marked *