JSON是什么?
首先JSON是一种数据格式,不是一种编程语言。
曾经有一段时间,XML 是互联网上传输结构化数据的事实标准,Web服务的第一次浪潮很大程度上都是建立在 XML 之上的,突出的特点是服务器与服务器之间通信。但不少人认为 XML 过于繁琐、冗长。
随着Web服务的发展,尤其当 JSON 出现后,其与JavaScript类似的语法,以及与 XML 相比可以直接解析为 JavaScript 对象的优势,让 JSON 受到广大 JavaScript 开发人员的热烈欢迎,JSON 也就逐渐成了Web服务开发中交换数据的事实标准。
JSON对象的两个方法
JSON.stringify()
,把 JavaScript 对象序列化为 JSON 字符串。
JSON.parse()
,把 JSON 字符串解析为原生 JavaScript 对象。
# JSON.stringify() 序列化 JavaScript 对象
var movie = {
movieid: "10641",
title: "哥斯拉",
writers: ["迪安·德夫林", "罗兰·艾默里奇"],
year: "1998"
}
JSON.stringify(movie)
// {"movieid":"10641","title":"哥斯拉","writers":["迪安·德夫林","罗兰·艾默里奇"],"year":"1998"}
还可以接收两个参数,用于指定不同的方式序列化 JavaScript 对象。
1、过滤结果
过滤参数是数组:
JSON.stringify(movie, ["title", "year"])
// {"title":"哥斯拉","year":"1998"}
过滤参数是数组,结果只返回数组中包含的属性。
过滤参数是函数:
JSON.stringify(movie, function(key, value){
switch(key) {
case "movieid":
return undefined;
case "writers":
return value.join(',');
default:
return value;
}
})
// {"title":"哥斯拉","writers":"迪安·德夫林,罗兰·艾默里奇","year":"1998"}
2、字符串缩进
JSON.stringify(movie, null, 4)
JSON.stringify(movie, null, "--")
3、toJSON()方法
var movie = {
movieid: "10641",
title: "哥斯拉",
writers: ["迪安·德夫林", "罗兰·艾默里奇"],
year: "1998",
toJSON: function() {
return this.title;
}
}
JSON.stringify(movie)
// "哥斯拉"
4、序列化的内部顺序
- 如果存在 toJSON() 方法,而且能通过它取得有效值,则调用该方法。否则返回对象本身。
- 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是 第 ‘1’ 步返回的值。
- 对第 ‘2’ 步返回的每个值进行相应的序列化。
- 如果提供了第三个参数,执行相应的格式化。
var movie = {
movieid: "10641",
title: "哥斯拉",
writers: {
a: "迪安·德夫林",
b: "罗兰·艾默里奇",
c: "泰德·埃里奥特"
},
year: "1998",
toJSON: function() {
return this.writers;
}
}
JSON.stringify(movie, ['a', 'c'], 4)
# JSON.parse() 解析 JSON 字符串
// 准备 json 字符串
var movie = {
movieid: "10641",
title: "哥斯拉",
writers: ["迪安·德夫林", "罗兰·艾默里奇"],
year: "1998",
toJSON: function() {
return this.writers;
}
}
var jsonText = JSON.stringify(movie)
// 解析
JSON.parse(jsonText)
JSON.parse() 方法也可以接收另一个参数,该参数是一个函数
var movie = {
movieid: "10641",
title: "哥斯拉",
writers: ["迪安·德夫林", "罗兰·艾默里奇"],
year: "1998",
releaseDate: new Date(1998, 5, 19)
}
var jsonText = JSON.stringify(movie)
var movieCopy = JSON.parse(jsonText, function(key, value) {
if(key === 'releaseDate') {
return new Date(value);
}else {
return value;
}
})
alert(movieCopy.releaseDate.getFullYear())