一、语法
1.JSON 的语法可以表示以下三种类型的值
①简单值:使用与JavaScript 相同的语法,可以在JSON 中表示字符串、数值、布尔值和null。但JSON 不支持JavaScript 中的特殊值undefined。
②对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
③数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。
eg: {
// 简单值
"name" : "yang", // 字符串
"age" : 20, // 数字
"isBoy" : false,
"wife" : null,
// 对象
"sports" : {
"ball" : "pingpong",
"water" : "swimming"
},
// 数组
"fruits" : ["apple", "pear", "banana"]
}
二、解析与序列化
1.JSON对象
// 将对象转换为字符串
var json = JSON.stringify(person); // object ==> JSON
// alert(json);
var obj = JSON.parse(json); // JSON ==> object
// alert(obj); // [object Object]
2.序列化选项
①过滤结果
// 第一种:字符串形式
// JSON.stringify()的第二个参数是数组或函数,其中包含两个字符串,返回结果仅返回name和fruits属性
var json = JSON.stringify(person, ["name", "fruits"]); // object ==> JSON
alert(json); // {"name":"yang","fruits":["apple","pear","banana"]}
// 第二种:函数形式
var json = JSON.stringify(person, function (key, value) {
switch(key) {
case "name":
return "xiao yang"; // 将name的值修改
case "fruits":
return value.join("|"); // 将fruits的项用|连接
default:
return value;
}
});
alert(json);
②字符串缩进,JSON.stringify()方法的第三个参数用于控制结果中的缩进和空白符
// 用---连接
var json = JSON.stringify(person, ["name", "fruits"], "---"); // object ==> JSON
alert(json);
④toJSON:可以自定义返回的数据,其实是过滤器的一种补充。
var person = {
// 简单值
name : "zhang",
toJSON : function () {
return this.name;
}
}
var json = JSON.stringify(person); // object ==> JSON
alert(json); // "zhang"
⑤解析选项: JSON.parse()方法也接受两个参数
第一个为json字符串
第二个为还原函数,和json.stringifY的第二个参数过滤器相似
eg: var person = {
// 简单值
name : "zhang",
age : 20,
releaseDate: new Date(2011, 11, 1)
}
var jsonText = JSON.stringify(person);
var bookCopy = JSON.parse(jsonText, function(key, value){
if (key == "releaseDate"){
return new Date(value); // 将releaseDate的值转化为对象
} else {
return value;
}
});
alert(bookCopy.releaseDate.getMonth()); // 11
网友评论