The second parameter can be a function to perform replacement while stringifying.
A null or undefined second parameter means that you want to use standard
stringification, without any customization.
From https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_pa
Starting in Firefox 3.5.4, JSON.stringify() offers additional
customization capabilities through the use of optional parameters. The
syntax is:
jsonString = JSON.stringify(value [, replacer [, space]])
value The JavaScript object to convert into a JSON string.
replacer A function that alters the behavior of the stringification process, or
an array of String and Number objects that serve as a whitelist for
selecting the properties of the value object to be included in the
JSON string. If this value is null or not provided, all properties of
the object are included in the resulting JSON string.
space A String or Number object that's used to insert white space into the output
JSON string for readability purposes. If this is a Number, it
indicates the number of space characters to use as white space; this
number is capped at 10 if it's larger than that. Values less than 1
indicate that no space should be used. If this is a String, the string
(or the first 10 characters of the string, if it's longer than that)
is used as white space. If this parameter is not provided (or is
null), no white space is used. The replacer parameter
The replacer parameter can be either a function or an array. As a
function, it takes two parameters, the key and the value being
stringified. The object in which the key was found is provided as the
replacer's this parameter. Initially it gets called with an empty key
representing the object being stringified, and it then gets called for
each property on the object or array being stringified. It should
return the value that should be added to the JSON string, as follows:
If you return a Number, the string corresponding to that number is
used as the value for the property when added to the JSON string. If
you return a String, that string is used as the property's value when
adding it to the JSON string. If you return a Boolean, "true" or
"false" is used as the property's value, as appropriate, when adding
it to the JSON string. If you return any other object, the object is
recursively stringified into the JSON string, calling the replacer
function on each property, unless the object is a function, in which
case nothing is added to the JSON string. If you return undefined, the
property is not included in the output JSON string. Note: You cannot
use the replacer function to remove values from an array. If you
return undefined or a function then null is used instead.
Example
function censor(key, value) {
if (typeof(value) == "string") {
return undefined;
}
return value;
}
var foo = {foundation: "Mozilla",
model: "box",
week: 45,
transport: "car",
month: 7};
var jsonString = JSON.stringify(foo, censor);
The resulting JSON string is {"week":45,"month":7}.
If replacer is an array, the array's values indicate the names of the
properties in the object that should be included in the resulting JSON
string.