一、定义介绍
-
XML 定义
扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML 使用 DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML 是标准通用标记语言(SGML)的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。 -
JSON 定义
JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON 采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于 C 语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使 JSON 成为理想的数据交换语言。
JSON 基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition – December 1999 的一个子集。
二、XML 和 JSON 优缺点
- XML 的优缺点
-
XML 的优点
a.格式统一,符合标准;
b.容易与其他系统进行远程交互,数据共享比较方便。 -
XML 的缺点
a.XML 文件庞大,文件格式复杂,传输占带宽;
b.服务器端和客户端都需要花费大量代码来解析 XML,导致服务器端和客户端代码变得异常复杂且不易维护;
c.客户端不同浏览器之间解析 XML 的方式不一致,需要重复编写很多代码;
d.服务器端和客户端解析 XML 花费较多的资源和时间。
- JSON 的优缺点
-
JSON 的优点:
a.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
b.易于解析,客户端 JavaScript 可以简单的通过 eval() 进行 JSON 数据的读取;
c.支持多种语言,包括 ActionScript、C、C#、ColdFusion、Java、JavaScript、Perl、PHP、Python、Ruby 等服务器端语言,便于服务器端的解析;
d.在 PHP 世界,已经有 PHP-JSON和JSON-PHP 出现了,偏于 PHP 序列化后的程序直接调用,PHP 服务器端的对象、数组等能直接生成 JSON 格式,便于客户端的访问提取;
e.因为 JSON 格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
-
JSON 的缺点
a.没有 XML 格式这么推广的深入人心和喜用广泛,没有 XML 那么通用性;
b.JSON 格式目前在
WebService
中推广还属于初级阶段。
三、XML 和 JSON 的优缺点对比
-
可读性方面。
JSON 和 XML 的数据可读性基本相同,JSON 和 XML 的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML 可读性较好些。 -
可扩展性方面。
XML 天生有很好的扩展性,JSON 当然也有,没有什么是 XML 能扩展,JSON 不能的。 -
编码难度方面。
XML 有丰富的编码工具,比如 Dom4j、JDom 等,JSON 也有 json.org 提供的工具,但是 JSON 的编码明显比 XML 容易许多,即使不借助工具也能写出 JSON 的代码,可是要写好 XML 就不太容易了。 -
解码难度方面。
XML 的解析得考虑子节点父节点,让人头昏眼花,而 JSON 的解析难度几乎为 0。这一点 XML 输的真是没话说。 -
流行度方面。
XML 已经被业界广泛的使用,而 JSON 才刚刚开始,但是在 Ajax 这个特定的领域,未来的发展一定是 XML 让位于 JSON。到时 Ajax 应该变成 Ajaj(Asynchronous Javascript and JSON) 了。 -
解析手段方面。
JSON 和 XML 同样拥有丰富的解析手段。 -
数据体积方面。
JSON 相对于 XML 来讲,数据的体积小,传递的速度更快些。 -
数据交互方面。
JSON 与 JavaScript 的交互更加方便,更容易解析处理,更好的数据交互。 -
数据描述方面。
JSON 对数据的描述性比 XML 较差。 -
传输速度方面。
JSON 的速度要远远快于 XML。
四、XML 与 JSON 数据格式比较
-
关于轻量级和重量级
轻量级和重量级是相对来说的,那么 XML 相对于 JSON 的重量级体现在哪呢?应该体现在解析上,XML 目前设计了两种解析方式:DOM 和 SAX。
-
DOM
DOM 是把一个数据交换格式 XML 看成一个 DOM 对象,需要把 XML 文件整个读入内存,这一点上 JSON 和 XML 的原理是一样的,但是 XML 要考虑父节点和子节点,这一点上 JSON 的解析难度要小很多,因为 JSON 构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组; -
SAX
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,都常常导致复杂的代码,极低的开发效率。
实际上,对于大多数 Web 应用来说,他们根本不需要复杂的 XML 来传输数据,XML 宣称的扩展性在此就很少具有优势,许多 Ajax 应用甚至直接返回 HTML 片段来构建动态 Web 页面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。同 XML 或 HTML 片段相比,数据交换格式 JSON 提供了更好的简单性和灵活性。在 WebSerivice 应用中,至少就目前来说 XML 仍有不可动摇的地位。
编码的可读性来说,XML 有明显的优势,毕竟人类的语言更贴近这样的说明结构。JSON 读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过 JSON 的索引 country.provinces[0].name 就能够读取“黑龙江”这个值。
编码的手写难度来说,XML 还是舒服一些,好读当然就好写。不过写出来的字符 JSON 就明显少很多。去掉空白制表以及换行的话,JSON 就是密密麻麻的有用数据,而 XML 却包含很多重复的标记字符。