JSON(JavaScript Object Notation(记号、标记)) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用彻底独立于语言的文本格式,可是也使用了相似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。JSON易于人阅读和编写,同时也易于机器解析和生成。javascript
1、JSON和XML的比较java
一、可读性程序员
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。json
二、可扩展性数组
XML天生有很好的扩展性,JSON固然也有,不过JSON在Javascript主场做战,能够存储Javascript复合对象,有着xml不可比拟的优点。网络
三、编码难度数据结构
XML有丰富的编码工具,好比Dom4j、JDom等,JSON也有提供的工具。无工具的状况下,相信熟练的开发人员同样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多不少结构上的字符。工具
四、解码难度ui
XML的解析方式有两种:this
一是经过文档模型解析,也就是经过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),可是这样是要在预先知道文档结构的状况下使用,没法进行通用的封装。另一种方法是遍历节点(document 以及 childNodes)。这个能够经过递归来实现,不过解析出来的数据仍旧是形式各异,每每也不能知足预先的要求。
凡是这样可扩展的结构数据解析起来必定都很困难。
JSON也一样如此。若是预先知道JSON结构的状况下,使用JSON进行数据传递简直是太美妙了,能够写出很实用美观可读性强的代码。若是你是纯粹的前台开发人员,必定会很是喜欢JSON。可是若是你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。而若是不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,获得的结果也不尽人意。可是这样也不影响众多前台开发人员选择JSON。由于json.js中的toJSONString()就能够看到JSON的字符串结构。固然不是使用这个字符串,这样仍旧是噩梦。经常使用JSON的人看到这个字符串以后,就对JSON的结构很明了了,就更容易的操做JSON。
以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场做战,其优点固然要远远优越于xml。若是JSON中存储Javascript复合对象,并且不知道其结构的话,我相信不少程序员也同样是哭着解析JSON的。
五、有效数据率
除了上述以外,JSON和XML还有另一个很大的区别在于有效数据率。JSON做为数据包格式传输的时候具备更高的效率,这是由于JSON不像XML那样须要有严格的闭合标签,这就让有效数据量与总数据包比大大提高,从而减小同等数据流量的状况下,网络的传输压力。
2、JSON支持的数据格式
JSON建构有两种基本结构:
一、A collection of name/value pairs
二、An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
json简单说就是javascript中的对象和数组,因此这两种结构就是对象和数组两种结构,经过这两种结构能够表示各类复杂的结构。
一、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,因此很容易理解,取值方法为对象.key 获取属性值,这个属性值的类型能够是数字、字符串、数组、对象几种。对象是一个无序的“‘名称/值’对”集合。
(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。
(2)每一个“名称”后跟一个“:”(冒号);
(3)“‘名称/值’ 对”之间使用“,”(逗号)分隔。
二、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和全部语言中同样,使用索引获取,字段值的类型能够是 数字、字符串、数组、对象几种。数组是值(value)的有序集合。
(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。
(2)值之间使用“,”(逗号)分隔。
通过对象、数组2种结构就能够组合成复杂的数据结构了。
举例2:包含三个People对象,这三个对象放在一个数组中。
{
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
}
举例3:包含三个程序员、三个做者和两个音乐家,每一个类别又放在一个数组中。
{"programmers":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
],
"authors":[
{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
],
"musicians":[
{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
]}