1.JSON语法
JSON是一种数据格式,并不是一种编程语言。虽然与JavaScript具有相同的语法形式,但JSON并不从属于JavaScript。JSON不支持变量,函数或对象实例,它就是一种表示结构化数据的格式1.语法
- 简单值: 字符串,数值,布尔和null。不支持JavaScript中的特殊值undefined
- 对象:作为复杂数据类型,表示的是一组有序的键值对。每个键值对的值可以是简单类型也可以是复杂类型
- 数组:表示一组有序的值的列表,可以通过数值索引来访问其中的值
JSON字符串必须使用双引号(单引号会导致语法错误)2.对象
JSON中对象与JavaScript字面量稍微有一些不同
JavaScript中的对象字面量:
JSON对象:var person = { name:"ethan", age:25 };
对象的属性必须加双引号{ "name":"ethan", "age":28 }
3.数组
JavaScript数组:
var values = [25,"hi",true];
JSON数组:
[25,"hi",true]
2.解析与序列化
1.JSON对象
早期使用eval()函数解析并返回JavaScript对象。现在通过JSON全局对象来解析json
stringify():
将JavaScript对象序列化为JSON字符串
parse():
将JSON字符串解析为原生JavaScript值在序列化JavaScript对象时,所有函数及原型成员都会被忽略。此外,值为undefined的任何属性也会被跳过。结果中最终都是值为有效JSON数据类型的实例属性。
2.序列化选项
JSON.stringify()除了接收要序列化的JavaScript对象外,还可以接收另外两个参数。一:过滤器,可以是一个数组,也可以是一个函数;二:一个选项,表示 是否在JSON字符串中保留缩进。1.过滤结果
如果过滤器参数是数组,那么JSON.stringify()的结果中将只包含数组中列出的属性
var person = { name:"zhangsan", "age":34, "hobbit":["football","basketball",'volleyball'], son:{ name:"李四", age:10 } }; var json = JSON.stringify(person,["name","age"]); console.log(json);// {"name":"zhangsan","age":34}
如果过滤参数是函数
var json = JSON.stringify(person,function(key,value){ switch(key){ case "name": return value; case "age": return undefined;//跳过指定的属性 case "hobbit": return value.join(","); default: return value; } }); console.log(json);// {"name":"zhangsan","hobbit":"football,basketball,volleyball","son":{"name":"李四"}}
2.字符串缩进
JSON.stringify()方法的第三个参数控制结果中的缩进和空白符。
var person = { name:"zhangsan", "age":29, hobbit:["basketball",