第20章、JSON

2017-11-08  本文已影响0人  Elevens_regret

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: {…}}
上一篇 下一篇

猜你喜欢

热点阅读