语法
JSON的语法可以表示以下三种类型的值:
//简单值: 使用与JS相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JS中的特殊值undefined; //对象: 对象作为一种复杂数据类型,表示的是一组有序的键值对,而每个键值对中的值可以是简单值,也可以是复杂数据类型的值; //数组: 数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型--简单值、对象或数组;
简单值
JS字符与JSON字符最大的区别在于,JSON字符必须使用双引号
对象
//JS的对象字面量 var person={ name="Nicholas", age:29 }; //JSON对象 { "name":"Nicholas", "age":29, "school":{ "name":"Merrimack College", "location":"North Andover,MA" } } //区别 没有声明变量(JSON中没有变量的概念) 没有末尾的分号 对象的属性必须加双引号
数组
//JS中的数组字面量 var values=[25,"hi",true]; //JSON中的数组 [25,"hi",true]
解析与序列化
JSON对象
stringify()//将JS对象序列化为JSON字符串; parse()//把JSON字符串解析为原生JS值; //在序列化JS对象时,所有函数和圆形成员都会被有意忽略,不体现在结果中,值为undefined的任何属性也会被跳过;
序列化选项
JSON.stringify()除了要序列化JS对象外,还可以接受两个参数,第一个参数是过滤器(可以是数组,也可以是函数),第二个参数是一个选择项,表示是否在JSON字符串中保留缩进 //过滤结果 var book{ "title":"Professional JavaScript", "authors":["Nicholas C.Zakas"], edition:3; year:2011 }; var jsonText=JSON.stringify(book,["title","edition"]);//第二个参数是数组 var jsonText=JSON.stringify(book,function(key,value){//第二个参数是函数 switch(key){ case "authors": return value.join(",") cae "year": return 5000; case "edition" return undefined; default: return value; } }); //字符串缩进 var jsonText=JSON.stringify(book,null,4); var jsonText=JSON.stringify(book,null,"--"); //toJSON()方法 var book{ "title":"Professional JavaScript", "authors":["Nicholas C.Zakas"], edition:3; year:2011, toJSON:function(){ return this.title; } }; var jsonText=JSON.stringify(book); //通过对象上调用toJSON()方法,返回其自身的JSON数据格式
解析选项
JSON.parse()方法可以接受一个函数参数: 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; } }); alert(bookCopy.releaseDate.getFullYear());
JS高级程序设计20-JSON
最新推荐文章于 2020-03-08 14:02:45 发布