json是一种数据格式,不是一种编程语言。
json是一种轻量级的数据格式,可以简化表示复杂数据结构的工作量。
1、语法
①json字符串必须使用双引号
②没有声明变量
③没有末尾分号
④json对象中的属性名必须加双引号
json的语法可以表示三种类型的值
简单值:使用与js相同的语法,可以在json中表示字符串、数值、布尔值和null。(不支持undefined)
"hello world"
对象:
{
"name":"Ewall",
"age":21
}
数组:
[25,"ewall",true]
2、JSON对象
两个方法:stringfy( ):把js对象序列化为json字符串
parse( ):把json字符串解析为原生js值
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017
};
var jsonText=JSON.stringify(person);
console.log(jsonText);
3、JSON.stringfy( )的具体用法
该方法可以传入三个参数,第一个参数是要序列化的对象;第二个是个过滤器(可以是数组或者是函数);第三个是一个选项,表示是否在JSON字符串中保留缩进。
①当过滤器是数组,那么该方法返回的结果将只包含数组中列出的属性
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017
};
var jsonText=JSON.stringify(person,["name","year"]);
console.log(jsonText); //{"name":"Ewall","year":2017}
②当过滤器是函数。传入的函数接收两个参数,属性名和属性值,根据属性名可以知道应该如何处理要序列化的对象中的属性。
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017
};
var jsonText=JSON.stringify(person,function(key,value){
switch(key){
case "friends":
return value.join(",");
case "year":
return undefined; //通过返回undefined删除该属性
default:
return value;
}
});
console.log(jsonText); //{"name":"Ewall","friends":"joe,frank","edition":3}
4、JSON.parse( )方法的具体用法
接收两参数:第一个参数是要序列化的对象;第二个参数是个还原函数。
在将日期字符串转换为Date对象是,经常要用到还原函数。
var person={
name:"Ewall",
friends:["joe","frank"],
edition:3,
year:2017,
releaseDate:new Date()
};
var jsonText=JSON.stringify(person);
console.log(jsonText);
var bookCopy=JSON.parse(jsonText,function(key,value){
if(key=="releaseDate"){
return new Date(value); //基于相应的json值创建一个新的Date对象
}else{
return value;
}
});
console.log(bookCopy.releaseDate);