简介
1.JSON:JavaScript Object Notation 对象表示法
2.JSON目前是JavaScript中读写结构化数据最好的方式
3.JSON是一种数据格式,并不是一种编程语言
语法
简单值
1.最简单的JSON数据形式就是简单值,比如5,“Hello World!”
2.JSON字符串必须使用双引号
对象
1.与JavaScript的对象字面量的区别:
(1)没有声明对象
(2)没有末尾的分号
(3)属性名要加双引号
例如:
{
"name":"LiNan",
"age":
}
{
"name":"LiNan",
"age":,
"school":{
"location":"North"
}
}
数组
[,,"hello world"]
解析与序列化
JSON对象
1.stringify():把JavaScript对象序列化为JSON字符串
2.parse():把JSON字符串解析为原生JavaScript值
序列化
注意:
(1)序列化JavaScript对象时,所有函数和原型成员被忽略
(2)值为undefined的任何属性被跳过
(3)最终值为有效的JSON数据类型的实例属性
简单序列化
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:
};
var jsonText = JSON.stringify(book);
alert(jsonText.toString());
结果
序列化选项
JSON.stringify()除了要序列化的JavaScript对象外,可以另外接收两个参数,第一个是过滤器,以不同形式序列化JavaScript对象。第二个是选项,表示是否在JSON字符串中保留缩进
1.过滤结果
(1)数组形式
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:
};
var jsonText = JSON.stringify(book,["title","edition"]);
alert(jsonText.toString());
结果
(2)函数形式
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:
};
var jsonText = JSON.stringify(book,function (key,value) {
switch (key){
case "authors":
return value.join(",");
case "year":
return ;
case "edition":
return undefined;
default:
return value;
}
});
alert(jsonText.toString());//一定要提供default值,保证其他值能够正常出现在结果中
结果
2.字符串缩进
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:
};
var jsonText = JSON.stringify(book,null,);//每个级别缩进4个空格
alert(jsonText.toString());
结果
3.toJSON()
自定义序列化JavaScript对象
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:,
toJSON:function () {
return this.title;
}
};
var jsonText = JSON.stringify(book,null,);
alert(jsonText.toString());
结果
4.序列化顺序
(1)如果toJSON()存在并且返回有效值,则调用该方法,否则返回对象本身
(2)如果提供第二个参数,应用这个函数过滤器。传入值为第(1)步返回的值
(3)对第(2)步返回的值进行序列化
(4)如果提供第三个参数,执行相应的格式化
解析
简单解析
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:,
};
var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText);
for(var key in bookCopy){
console.log(key.toString()+":"+bookCopy[key]);
}
结果
解析选项
var book = {
title:"aaa",
authors:["xiaoming"],
edition:,
year:,
releaseDate:new Date(,,)
};
var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText,function (key,value) {
if(key=="releaseDate"){
return new Date(value);
}else{
return value;
}
});
for(var key in bookCopy){
console.log(key.toString()+":"+bookCopy[key]);
}
console.log(bookCopy.releaseDate.getFullYear());
结果
总结
(1)JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量
(2)JSON.stringify()和JSON.parse()分别用来将对象序列化为JSON字符串和将JSON数据解析为JavaScript对象
(3)原生JSON目前得到很多浏览器的支持
参考
《JavaScript高级程序设计(第3版)》