JSON基础
JSON:javaScrept对象表示法
JSON说明
JSON只是一种数据格式,主要用来传递数据,
JSON语法
-
基础语法
-
将JavaScript数据转化为JSON数据——即为序列化
// 把JavaScript对象序列化成JSON字符串 var jsonText = JSON.stringify(book);
-
将JSON数据转化为JavaScript数据——即为解析
// 将JSON对象解析成原生JavaScript值 var js = JSON.parse(jsonText);
-
-
JSON可以表示一下三种类型的数据
- 简单值:可以在JSON里面表示 数值、字符串、布尔值、null;不支持undefined
- 对象:复杂数据类型,保存一组键值对;在JSON里,对象的键一定要加双引号,值可以是简单值,也可以是复杂数据类型的值
- 数组:复杂数据类型,保存一组值;值可以是简单值,也可以是复杂数据类型的值
JSON不支持变量,函数,对象实例等,它只是一种表示数据的格式,里面只用来存储数据,不会有逻辑、操作等代码在里面。
一般来说对象和数组是JSON数据最外层的结构,利用它们可以创造出各种各样的数据集合。
序列化和解析
序列化选项
-
过滤结果:
JSON.stringify(js对象,过滤器参数)方法可以传递两个参数
- 如果过滤器参数是数组,那么JSON.Stringify()的结果将只包含数据中列出的属性
- 如果过滤器参数是函数(过滤函数),可以改变序列化对象的结果;函数第一个参数默认是属性名(键),第二个参数默认是属性值如果返回的是undefined,则相应的属性名和属性值会被忽略。
-
格式化:字符串缩进、空白符
第三个参数控制缩进和空白符
- 如果是一个数值,表示空白字符个数,最大为10,大于10的转换成10;如果第三个参数是有效参数,会自动帮我们插入换行符,提高可读性。
- 如果是一个字符串,这个字符串将被作为缩进字符,而非原来的空白字符作为缩进;字符串参数里的字符个数不能超过10个,超过10个,结果中只出现前10个字符。
-
toJSON方法
我们可以在需要序列化的对象上增加一个toJSON方法,这样当使用JSON.stringify()方法时,实际上就是调用了对象中的toJSON()方法。
-
把一个对象传入JSON.stringify()中,序列化改对象的顺序如下
- 如果该对象中有toJSON方法,则直接调用该方法
- 如果JSON.stringify()中有第二个参数,则应用过滤器,过滤器接收的值就是上面返回的值
- 过滤器处理第一个中返回的值
- 如果有第三个参数,执行相应的格式化
解析选项
JSON.parse()方法也有两个参数,第二个参数是一个函数,叫做还原函数
总结
JSON.stringify()
用于序列化,JSON.parse()
用于解析JSON.stringify()
有三个参数,第一个是js对象,第二个是过滤器,第三个是用来格式化JSON输出JSON.parse()
有两个参数,第一个参数是JSON对象,第二个参数是还原函数- js对象中可以声明一个
toJSON
方法,当JSON.stringify()
方法调用时,自动执行toJSON
方法 - 注意,
JSON.stringify()
方法的返回值都是字符串类型