【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;
}
});
网友评论