【JavaScript高级教程】笔记-JSON篇

【JavaScript高级教程】笔记-JSON篇

JavaScript Object Notation, Javascript 对象表示法

注:JSON是一种数据格式,不是一种编程语言。

1.语法

JSON的语法可以表示,三种类型的值:

  • 简单值:字符串,数值,布尔值,null。不支持 undefined
  • 对象:与JavaScript中对象相近,简单或者复杂键值对形式,但是,key 必须用双引号。
  • 数组:与JavaScript中数组相近,值或者对象的有序列表。

注:JSON不支持变量,函数,对象实例。

1.简单值的JSON形式

数值: 5
字符串: "hello world!"
布尔值: 布尔值
null: null

2.对象的JSON形式

{
    "name": "nike",
    "age": 29
}

注:不要写成 单引号。

3.数组的JSON形式

[25, "hi", true]

也可以是复杂的数组形式,内部值为数组或者对象。

2.解析与序列化

1.序列化

JSON.stringify(obj[,filter,indentation])
1.参数
obj:要序列化的JavaScript对象;
filter:可以是数组形式,也可以是函数;

1.数组形式:JSON.stringify()的结果只包含数组中列出的属性。
eg:
var book = {
    "title":"Professional Javascript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011
}

var jsonText = JSON.stringify(book, ["title", "edition"]);

2.函数形式:函数接收两个参数,key和value。函数返回值就是相应键的值。
注:如果返回undefined,则对应的属性被忽略。
var book = {
    "title":"Professional Javascript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011
}

var jsonText = JSON.stringify(book, function(key, value){
    switch(key){
        case "authors":
            return value.join(",");
        
        case "year":
            return 5000;
        
        case "eiditon":
            return undefined;
        
        default:
            return value;
    }
})
indentation: 控制结果中的缩进和空白符。
注:最大缩进为10,大于10会自动转化为10。

也可以使用制表符或者任意字符,用来填充。
2.toJSON方法
var book = {
    "title":"Professional Javascript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011,
    toJSON: function(){
        return this.title
    }
}

var jsonText = JSON.stringify(book); //"Professional Javascript"

相当于复写了内部方法。
3.序列化顺序
1.如果存在toJSON方法且能通过他取得有效值,则调用该方法,否则,返回对象本身;
2.如果提供了参数二,则进行过滤。传入过滤器的值,是第一步返回的值;
3.对第二步返回的值进行序列化;
4.如果提供了参数三,则进行相应格式化;

注:个人理解像递归函数。

2.解析

JSON.stringify(obj[,reviver])
1.参数
obj:要解析的JavaScript对象;
reviver: 还原函数;
注:如果还原函数返回undefined,则从结果中删除相应的key;如果返回其他值,则正常解析;
eg:
var book = {
    "title":"Professional Javascript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011,
    releaseDate: new Date(2011, 11, 1)
}

var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText, function(key, value){
    if (key == "releaseDate") {
        return new Date(value);
    } else {
        return value;
    }
});

你可能感兴趣的:(【JavaScript高级教程】笔记-JSON篇)