定义
一种数据格式,
语法
json可以表示下面三种类型的值:
简单值:2,"hello"
对象:{"name": "lili"}
数组:[1,2,3,4,5]
解析与序列化
JSON.stringify():
: 序列化
JSON.parse()
: 解析
var data = {
num: 1,
object: {name: "lili"},
array:[1,2,3,4,5]
};
var aa = JSON.stringify(data);
var bb = JSON.parse(aa);
原来的格式:{num: 1,object: {name: "lili"},array:[1,2,3,4,5]};
序列化的结果:{"num":1,"object":{"name":"lili"},"array":[1,2,3,4,5]}
解析后的结果:{ num: 1, object: { name: 'lili' }, array: [ 1, 2, 3, 4, 5 ] }
序列化的参数
JSON.stringify()
序列化可以接受两个参数,第一个参数是一个过滤器,可以是一个数组,只对数组中已经存在的值进行序列化,第二个参数是一个选项,表示是否保留字符串的缩进。
var data = {
num: 1,
object: {name: "lili"},
array:[1,2,3,4,5]
};
var aa = JSON.stringify(data,["num"]);
console.log(aa); // {"num":1}
var bb = JSON.stringify(data,null,3);
console.log(bb)
/*每个级别缩进3个空格
{
"num": 1,
"object": {
"name": "lili"
},
"array": [
1,
2,
3,
4,
5
]
}
*/
toJSON()
方法:
如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为:不是那个对象被序列化,而是调用 toJSON 方法后的返回值会被序列化
var obj = {
foo: 'foo',
toJSON: function () {
return 'bar';
}
};
console.log(JSON.stringify(obj)); // "bar"
console.log(JSON.stringify({x: obj})); // {"x":"bar"}
解析的参数
JSON.parse()
:还可以接收另一个参数,是一个函数,这个函数有两个参数 键 和 值,在每个键值对中调用,叫做还原函数,而且需要返回值。
JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
// 最后一个属性名会是个空字符串。
return v; // 返回原始属性值,相当于没有传递 reviver 参数。
});
/*
1
2
4
6
5
3
*/