一、引入
1、json是什么?
(1)json可以视为一种数据格式(应用对象:互联网数据传输),不是一种编程语言;
(2)作为一种通用的数据格式,json拥有和 JavaScript相同的语法,但不属于JavaScript;
(3)由于多种语言都有解析和序列化JSON的内置能力,,因此JSON可以作为多种编程语言的Web服务数据传输的格式标准。
总结:JSON是一种拥有JavaScript语法结构的数据格式标准,不是一种编程语言,可以作为多种编程语言的数据传输格式标准。
2、JSON的优点
(1)语法简洁,避免了XML数据传输事实标准的冗余,目前所有的浏览器都应经支持原生全局JSON对象;
(2)JSON 不需要 创建DOM,即可实现数据直接传递给eval()
二、JSON的语法
JSON中含有3种数据类型:简单值、对象、数组,JSON中没有变量、函数、对象实例的概念。JSON中所有的符号都是为结构化表示数据服务的。
1、简单值(包含4种基本类型):
①字符串
②数值
③布尔值
④null
注:JSON中没有undefined。JSON中表示字符串只能用双引号,使用单引号会报错。
2、对象:复杂数据类型,用于表示有序键/值对,每个值可以是简单值。
注:
- *对象的属性必须用双引号括起来;
- 没有变量的概念,直接用{ }将对象的属性包起来,花括号外面不能声明变量;
- 末尾不能加分号*
3、数组:复杂数据类型,是一种通过索引访问内部数据的有序列表,数组的内部元素可以是简单值、对象、数组等任意类型。
**注:没有变量和分号
三、解析与序列化
1、JSON对象
JSON有两个对象方法:
(1) stringify():把JavaScript对象序列化为JSON字符串;
注:JSON.stringify()输出的JSON字符串不包含任何空格字符或者缩进;
(2)parse():把JSON字符串解析成原生的JavaScript值;
2、序列化选项
JSON.stringify()除了可以传入序列化对象,还可以传入两个参数,第一个参数为过滤器(可以为数组或函数),第二个参数为缩进值(数字),两个参数既可以单独使用,也可以组合使用,实现JSON的序列化。
(1)序列化处理手段:
①过滤结果
②字符串缩进
③toJSON()方法:可以让对象返回任何序列化值
(2)序列化对象的执行顺序
①如果toJSON()方法存在且能取得有效值,调用该方法,否则采取默认调用格式;
②如果提供了第二个参数,应用过滤器,传入 过滤器的值为①的返回值;
③对第②步返回的每个值进行相应的序列化;
④如果提供了第三个参数执行相应的格式化。
3、解析选项
JSON.parse()也可以接受另一个参数,该参数是一个函数,将在每个键值对儿上调用。
JSON.stringify()与JSON.parse()传入函数的区别
(1)JSON.stringify():过滤函数
(2)JSON.parse():还原函数
注:过滤函数与还原函数的签名是相同的——都传入两个参数,一个键一个值,而且都需要返回一个值。
如果还原函数返回undefined,表示从结果中删除相应的键;如果返回其他值,插入到该结果中。