美文网首页
JSON 笔记

JSON 笔记

作者: LYF闲闲闲闲 | 来源:发表于2017-08-04 09:08 被阅读18次

    定义

    一种数据格式,

    语法

    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 笔记

          本文链接:https://www.haomeiwen.com/subject/oypplxtx.html