[转]JSON 还是 XML?开发环境决定选择结果!
JSON 还是 XML?开发环境决定选择结果!
2010-03-25 17:03
数据要传输,就需要把数据表示出来。用什么格式来表示数据,这是个问题。
JSON和XML都是非常成熟的结构化数据表示方法。大多有经验开发者都不愿意自己重新定义数据表示的格式,因为那样的确费力不讨好,毕竟很多人都看到了自己和天才之间的差距。但在选择数据的表示方法时,却是各执一词,为选择JSON还是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成为理想的数据交换语言。(取自www.Json.org)
XML: XML 全称是可扩展标记语言(EXtensible Markup Language),是一种类似与HTML的语言,是被设计用来描述数据的语言。在XML中没有预先定义的标签(tags,在html中就是类似与, 之类的东西);XML 是能够自解释(self describing)的语言;XML 使用DTD(Document Type Definition文档类型定义)来显示这些数据。软件都使用XML来保存配置信息,在您的机器上搜索一下,一定能找到不少扩展名为.xml的文件。
以上只是从网上找的一些简单片段,如果您需要了解更多详细信息,请使用搜索引擎:)
XML产生较早,这种清晰易读的结构化数据表示方法立刻风行天下,很多
JSON是如何产生的,我在网上没有搜到这些资料,笔者猜测它也许是JavaScript的副产品。当初设计JavaScript的时候,可能设计人员想设计一个简单的结构化方式来表达JavaScript内的数据变量,于是就定义了JSON的语法,和JavaScript的其它语法定义混在一起,也没有人注意到它,以至于以前看了很多JavaScript的书籍都没有提到JSON。后来我听说JSON以后,以为也会为JavaScript提供一个函数库,谁知JavaScript天生就很“JSON”。
在网上,有很多在XML和JSON之间的比较,看一下这些比较的内容,有助于我们加深了解它们,并做出更正确的选择。
轻量级和重量级
比较之一是轻/重量级的比较。JSON是轻量级的数据交换格式,言下之意,XML算是重量级的数据格式。这一点确实不错,可是重量级体现在哪些方面呢?何为轻、何为重?什么又算是重量级的应用呢?
如果你只是要表达一个数据结构,把一组数据作为一个整体存放起来或用于传输,那么这就是一个轻量级的应用。无论你有多少数据,都只能算是轻量级的应用。你可以使用JSON,也可以使用XML。当数据量很大的时候,它们都一样的慢。别以为XML是重量级的就会比JSON快。
那么XML的重量机体现在哪儿呢?事实上体现在解析上。XML设计了两种解析方式:DOM和SAX。DOM把一个XML整体解析成一个DOM对象,这一点和JSON把JSON文字解析成JSON对象是一样的。SAX是一个类似消息驱动的解析方法,不需要把整个文档都解析完就可以对解析出的内容进行处理。每当解析出一个对象时,都会通知到程序的处理代码以处理这个对象。程序也可以随时中止解析。这样,一个大的文档就可以逐步地、一点一点地展现出来。如果在网络上传输数据流,那么在传输的过程中,已传输的部分就已经被处理了。这一点,JSON是做不到的,至少目前的JSON程序组件并没有支持这种解析方法。
所以,JSON和XML的轻/重量级的区别在于:JSON只提供了整体解析方案,而这种方法只在解析较少的数据时才能起到良好效果;而XML提供了对大规模数据的逐步解析方案,这种方案很适用于对大量数据的处理。
而对于应用程序。只要整体数据可以一次性读取和写入的,都只能算是轻量级应用。所以还要依赖其它特征来选择JSON或XML。
易用性,或开发复杂性
有人很不喜欢DOM,认为用起来太麻烦,所以选择JSON。事实上使用不同的语言,不同支持库,代码的复杂性都不相同。而现在很多应用都是多语言的。比如基础服务器可能是用C++写的,可能有一个Java编写的WEB服务要和这个C++写的服务器交互,而WEB服务的客户端又要用JavaScript语言编写程序访问这个Java写的Web服务。
JSON为许多种语言都提供了解析库。访问http://www.json.org/可以下对这些语言JSON支持库。
XML的解析有点复杂。网上有一些开源的解析程序,但对于初学者,理解起来不是特别容易。Java语言的XML支持包还是很好用的,有点编程基础的人理解起来也不算太难。C/C++的XML解析也不算麻烦,可以使用tinyxml一类的库。笔者在Windows下开发程序时,习惯用MSXML库来解析、生成XML数据。当然,直接使用MSXML还是挺麻烦的,对其进行适当的包装可以事半功倍。
所以,易用性不在于JSON或XML本身,而在于你要使用的语言和你所拥有的基础。如果你熟悉XML,没必要羡慕JSON的使用者更简单;反之,如果你一直在使用JSON,也别以为XML的使用真有那么笨重;如果你很好学,建议你都学习一下。
笔者的选择
在使用C++写Windows应用时,笔者用XML来管理配置文件,因为我对MSXML进行了包装,用起来得心应手。
在写WEB应用时,服务端用Java,客户端使用JavaScript,这时我选择用JSON来传输数据,因为JavaScript天生就JSON,而Java的JSON库用起来也还算不错!(Java的JSON支持库除了Json.lib以外,还有一堆其它的库,都要下载才可以)
备注: 本文装载自:天极网