JSON 笔记

定义

一种数据格式,

语法

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
*/

你可能感兴趣的:(JSON 笔记)