美文网首页
第20章、JSON

第20章、JSON

作者: Elevens_regret | 来源:发表于2017-11-08 16:32 被阅读0次

    20.1 语法

    JSON的语法可以表示一下三种类型的值。
    简单值:与JavaScript相同,可以表示字符串,数值,布尔值和null,但不支持特殊值undefined。
    对象:无需键值对。
    数组:有序值的列表。
    JSON不支持变量,函数或对象实例,仅是一种表示结构化数据的格式。

    20.1.1 简单值

    JSON表示字符串时必须用双引号,单引号会导致语法错误。其他简单值表示与JavaScript相同。

    20.1.2 对象和数组

    JSON中对象的属性名称要加双引号。JSON对象没有声明变量,没有末尾分号,同一个对象不能出现两个同名属性。JSON数组的语法与JavaScript相同,但同样也没有变量和分号。


    20.2 解析与序列化

    20.2.1 序列化

    JSON对象的stringify()方法用于将JavaScript对象序列化为JSON字符串。默认情况下,输出的JSON字符串不包含任何空格字符或缩进。所有函数及原型都会被有意忽略,值为undefined的任何属性也都会被跳过。

    var obj = {
        x:"a",
        y:"b",
        z:{
            z1:[1,2,3],
            z2:"z2"
        },
        u:undefined,
        f:function () {
            return this.x;
        }
    };
    console.log(JSON.stringify(obj));  // {"x":"a","y":"b","z":{"z1":[1,2,3],"z2":"z2"}}
    

    JSON.stringify()方法第二个参数可以是一个数组或方法,为数组时,序列化的结果将只包含数组中列出的属性。

    console.log(JSON.stringify(obj,["x","y"]));  // {"x":"a","y":"b"}
    

    第二个参数为方法时,接收两个参数,一个是属性名,一个是属性值,可以在方法中对属性进行操作,根据函数的返回值改变序列化的结果。返回值为undefined的项会被忽略。

    console.log(JSON.stringify(obj,function (key, value) {
        console.log(value);
        return value;
    }));
    

    JSON.stringify()方法第三个参数是用于控制缩进和空白符,如果这个参数是一个数值,则表示每个级别缩进的空格数。缩进值最大为10。

    console.log(JSON.stringify(obj,null,4));
    /*
    {
        "x": "a",
        "y": "b",
        "z": {
            "z1": [
                1,
                2,
                3
            ],
            "z2": "z2"
        }
    }
    */
    

    当缩进参数为一个字符串时,将用这个字符串来当做缩进符。

    console.log(JSON.stringify(obj,null,"----"));
    /*
    {
    ----"x": "a",
    ----"y": "b",
    ----"z": {
    --------"z1": [
    ------------1,
    ------------2,
    ------------3
    --------],
    --------"z2": "z2"
    ----}
    }
    */
    

    当对象上有toJSON()方法时,在序列化的时候会执行toJSON()方法来返回序列化结果。

    var obj = {
        x:"a",
        y:"b",
        z:{
            z1:[1,2,3],
            z2:"z2"
        },
        u:undefined,
        f:function () {
            return this.x;
        },
        toJSON:function () {
            return 0;
        }
    };
    console.log(JSON.stringify(obj));  // 0
    
    20.2.2 解析

    JSON.parse()方法用于将JSON字符串解析为JavaScript对象。同样接收一个用于操作解析的方法作为参数。与序列化方法的第二个参数相同,这个解析方法接收两个参数一个是属性名,一个是属性值,可以在方法内对每一项进行操作,根据返回值改变解析的结果。

    var obj = {
        x:"a",
        y:"b",
        z:{
            z1:[1,2,3],
            z2:"z2"
        },
        u:undefined,
        f:function () {
            return this.x;
        }
    };
    var jsonObj = JSON.stringify(obj);
    console.log(JSON.parse(jsonObj,function (key, value) {
        if(key==="x"){
            value +=1;
        }
        return value;
    }));  // {x: "a1", y: "b", z: {…}}
    

    相关文章

      网友评论

          本文标题:第20章、JSON

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