JSON(JavaScript Object Notation)

是一种数据交换语言。是Javascript的一个子集。

json不支持函数属性
只支持数字(必须是十进制),字符串,布尔值,null(NaN, Infinity, -Infinity和undefined都会被转为null)的简单值或复合值(json对象或json数组)。//原始对象中,有一个成员的值是undefined、函数或XML对象,这个成员会被省略
数组或对象最后成员不能加逗号
字符串必须使用双引号,不能用单引号
对象成员名称必须使用双引号//ps: es6中对象属性名可以是变量[var]
正则对象会被转成空对象。
JSON.stringify方法会忽略对象的不可遍历属性。
JSON.stringify把整个JSON对象当做第一个建,键名为空
JSON.stringify递归处理中,每一次处理的对象,都是前一次返回的值。
如果处理函数返回undefined或没有返回值,则该属性会被忽略。
JSON.stringify第三个参数表示添加空格或将字符添加到行头
JSON.stringify方法处理的对象,如果包含一个toJSON方法,则它会使用这个方法得到一个值,然后再将这个值转成字符串,而忽略其他成员。Date对象就部署了一个自己的toJSON方法。

模板字符串(实际上含有表达式)不能被JSON.parse正确解析(变成普通字符串)
由于对象的属性无序,所以JSON.stringify序列号对象的字符串不一定每次都一样。

var foo = {};
foo.bar = "new property";
foo.baz = 3;

JSON.stringify(foo,function(key,value){
if (value !== 3) {
return undefined;
//迭代处理使用返回的结果,第一次处理的key是整个json
}
return value;
});

JSON.stringify的函数参数:对于对象和数组有不同的处理,如果是数组,函数返回不支持的对象如undefined时将用null替换,而序列号对象时则不添加该键值对。返回对象能递归应用。返回函数直接忽略。

foo = [2,3,"23"]
JSON.stringify(foo,function(key,value){
if (value == 2) {
return undefined;
}
return value;
});