关于JSON,最重要的是要理解它是一种数据格式,不是一种编程语言。虽然,具有相同的语法形式,但JSON并不从属于JavaScript。而且,并不是只有JavaScript才使用JSON,毕竟JSON只是一种数据格式。很多编程语言都有针对JSON的解析器和序列化器。
JSON的语法可以表示以下三种类型的值:
简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串,数值,布尔值和NULL。但是JSON并不支持JavaScript中的特殊值undefined。
对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数组索引来访问其中的值。数组的值也可以是任意类型——简单值,对象或数组。
早期的JOSN解析器基本上就是使用JavaScript的eval()函数。在旧版本的浏览器中,使用eval()对JSON数据结构求值存在风险,因为可能会执行一些恶意代码。ECMAScript5对解析JSON的行为进行了规范,定义了全局的JSON。
JSON对象有两个方法:stringify()和parse()。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。
如下面的例子:使用parse()把JSON字符串解析为原生JavaScript值,然后使用stringify()把javascript对象序列化为JSON字符串。
在使用JOSN.stringify()把一个JavaScript对象序列化为一个JSON字符串时,所有函数及原型成员都会被有意忽略,不体现在结构中。此外,值为undefined的任何属性也都会被跳过。
如需了解更多有关JSON知识请看《JavaScript 高级编程》第20章,其中有关于JSON字符串序列化的内容。