更多资料请访问:http://blog.csdn.net/q1056843325/article/details/53427123
JSON语法大体分为三种类型值
- 简单类型值:可表示字符串、数字、布尔值和null
- 对象:复杂数据类型,表示无序键值对
- 数组:复杂数据类型,表示有序值列表
-
简单类型值
单独的基本类型值也可以看做JSON
语法与JavaScript相同
只有一点要注意
在我们JavaScript中字符串可以用双引号表示,也可以用单引号表示
但是JSON中的字符串格式必须使用双引号 -
对象
由于JSON是JavaScript语法的子集
所以我主要说一下不太一样的地方
先看一下我们常用的对象字面量声明格式- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
我们JavaScript中对象可以给属性加引号也可以不加
(为了区分普通对象与JSON对象,通常不加引号)
但在JSON中对象要求给属性加(双)引号
我们上面的对象在JavaScript中也可以这么写,完全等价- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
而用JSON表示上面的对象就是
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
(JSON中没有变量的概念,没有分号)
当然JSON中对象的值也可以是对象
不管多么复杂的JSON,对象的键(属性)都要加(双)引号 -
数组
虽然在我们JavaScript中,数组严格来说属于对象
但我们通常都把它们区别对待
我们通用的声明数组字面量的方法- 1
- 1
JSON也是相同的语法
- 1
- 1
再次强调,JSON没有变量和分号
通常来说,数组和对象是JSON的最外层形式
通过数组、对象以及简单类型值能够构造各式各样的JSON数据格式JSON对象
ES5规范了解析JSON的行为
定义了全局对象JSON
它有两个方法- stringify()
JavaScript对象 –> JSON字符串 - parse()
JSON字符串 –> JavaScript对象
最基本的用法当然就是
我们把要转换的变量作为参数穿进去
举个例子(这个例子会一直用)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
下面我们看看控制台打印
可以看到JSON.stringify真的返回了JSON字符串
我们无引号还有单引号的属性在JSON字符串中都变成了双引号
并且属性值为undefined或者函数的属性被自动忽略了
(原型成员更是被忽略掉)但是数组不一样
数组没有对象绝情把它们一脚踢开,而是返回null- 1
- 1
我们可以用JSON.parse还原为JavaScript对象
- 1
- 1