信息化到处被提及的特点,就是拥有大量的数据交互的格式。前阵子学习了XML的结构化数据,在学习javascript的时候又接触到了JSON,都作为数据的存储格式,二者之间有什么区别和联系呢,查了很多的资料,小编在这里就相当于写个总结了。
十年前,XML是主要的数据交换格式。它的出现,尤如一股清新的空气,以及令人惊喜的SGML(标准通用标记语言),是一个巨大的进步。它使人们能够做到以前想都不敢想的事情,本质上讲,XML就是一个文本文件,在解析上,在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端解析XML,都常常导致复杂的代码,极低的开发效率,无疑让JSON占了上风,加上在javascript的领域中,利用toJSONString()就可以看到JSON的字符串结构。
## 一、JSON是什么
JSON : JavaScript Object Notation 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
关于XML的详细介绍(见博客:[B/S初探之XML学习小结](http://blog.csdn.net/zhou2s_101216/article/details/42215059))。
## 二、JSON的优缺点
优点:
(1)数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
(2)易于解析,客户端JavaScript可以简单的通过eval_r()进行JSON数据的读取;
(3)支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
(4)在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
(5)因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
缺点:
(1)没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
(2)JSON格式目前在Web Service中推广还属于初级阶段
## 三、XML的优缺点
优点:
(1)格式统一,符合标准;
(2)容易与其他系统进行远程交互,数据传输比较方便。
缺点:
(1)XML文件庞大,文件格式复杂,传输占带宽;
(2)服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
(3)客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
(4)服务器端和客户端解析XML花费较多的资源和时间。
## 四、二者比较
1、可读性
JSON和XML的可读性可谓不相上下,一边是简易的语法(JSON),一边是规范的标签形式(XML),很难分出胜负。
2、可扩展性
XML天生有很好的扩展性,JSON当然也有,没有什么是XML可以扩展而JSON却不能扩展的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着xml不可比拟的优势。
3、编码难度
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。
4、解码难度
XML的解析方式有两种:一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。凡是这样可扩展的结构数据解析起来一定都很困难。JSON也同样如此。
5、有效数据率
JSON作为数据包格式传输的时候具有更高的效率,这是因为JSON不像XML那样需要有严格的闭合标签,这就让有效数据量与总数据包比大大提升,从而减少同等数据流量的情况下,网络的传输压力。
以上都是我查到的,不怕脑洞不够大,一张导图总结以上的内容:
![](https://box.kancloud.cn/2016-08-19_57b6bd296ff4c.jpg)
## 五、举例
XML:
~~~
<?xml version="1.0" encoding="utf-8"?>
<country><name>中国</name>
<province><name>黑龙江</name><cities><city>哈尔滨</city><city>大庆</city></cities></province>
<province><name>广东</name><cities><city>广州</city><city>深圳</city><city>珠海</city></cities></province>
<province><name>台湾</name><cities><city>台北</city><city>高雄</city></cities></province>
<province><name>新疆</name><cities><city>乌鲁木齐</city></cities></province>
~~~
JSON:
~~~
<span style="font-family:KaiTi_GB2312;font-size:18px;"> { "people":
[ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
]}</span>
~~~
## 六、总结
个人认为JSON更好,因为它不像XML那么详尽,并且比起纯二进制更容易被人们理解。XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,为了实现友好的异步数据传输,JSON还是很有潜力的。