JSON(JavaScript Object Notation)是JavaScript对象表示法,是一种轻量级的数据格式,并不是一种编程语言。它有两个API:JSON.stringify()和JSON.parse()。
一、语法
JSON的语法可以表示三种类型的值:简单值、对象、数组。JSON不支持变量、函数或对象实例,它就是一种表示结构化数据的格式,虽然与JavaScript中表示数据的某些语法相同,但它并不局限于JavaScript的范畴。
二、解析与序列化
JSON之所以流行,一是因为它拥有与JavaScript类似的语法,二是他可以把JSON数据结构解析为有用的JavaScript对象。
1、JSON对象:JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。
2、序列化选项:实际上,JSON.stringify()除了要序列化的JavaScript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavaScript对象。第一个参数是过滤器(参数可以是数组,也可以是函数),第二个参数是一个选项(表示是否在JSON字符串中保留缩进,缩进字符串最长不能超过10个字符)。JSON.stringify()无法满足自定义序列化需求的时候,可以给对象定义toJSON()方法,返回其自身的JSON数据格式。
假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:(理解这个顺序至关重要)
(1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。
(2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
(3)对第(2)步返回的每个值进行相应的序列化。
(4)如果提供了第三个参数,执行相应的格式化。
3、解析选项:JSON.parse()方法也可以接收另外一个参数,该参数是一个函数,将在每个键值对儿上调用,这个函数被称为还原函数。还原函数与JSON.stringify()接收的替换(过滤)函数类似,都是接收两个参数,一个键和一个值,而且都需要返回一个值。
三、注意
1、JSON对象的属性必须加双引号,而不能是单引号;
2、JSON中不允许使用注释;
3、JSON中没有undefined这个值。
代码演示及详细介绍可参考JavaScript高级程序设计(第3版)第20章