对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效格式 :
{"addressbook": {"name": "Mary Lebow",
"address": { "street": "5 Main Street" ,
"city": "San Diego, CA",
"zip": 91912, },
"phoneNumbers": [ "619 332-3452","664 223-4667" ]
}
}
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换格式。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
示例
var a={ name:'abc', code:123}; //一个最简单的json格式 定义的对象
var b={ id:1, property:{ name:'abc', code:123}};//注意 其中的property又是一个对象
var c={ "数据":[{ name:'abc', code:1} ,{ name:'def', code:2} ]}; //“数据”是一个数组,数组中的每个元素都是对象。
因此,JSON格式遵循如下的定义规则:
属性名称:冒号左边的部分是属性名称,也称变量名称,或键。它可以用一对引号(单引号,双引号都可以)括起来 ,也可以不用引号括起来 。当不用引号括起来时,它必须是由字母开头,并由字母,数字,下划线组成的标识符,比如上面的name ,code ,id 等都是合法的属性名称 。当属性名称是存在非字母,数字,下划线字符(比如中文时),属性名称必须使用引号括起来 ,当访问该属性时,只能[]来访问,比如 c["数据"][0].name ='abc'
数组:是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值:(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串:(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
数值:(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
空白可以加入到任何符号之间。
将上面的JSON格式用XML改写,如下:
<addressbook>
<name>Mary Lebow</name>
<address>
<street>5 Main Street</street>
<city zip="91912"> San Diego, CA </city>
<phoneNumbers>
<phone>619 332-3452</phone>
<phone>664 223-4667</phone>
</phoneNumbers>
</address>
</addressbook>
是不是很相似?但它们并不相同。下面将详细阐述采用JSON句法的优点
乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。
这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息:
如果您具备DOM编程经验,就能很快地看出区别
JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。
通过一段脚本练习可能有且于理解JSON的使用