导航
导航
文章目录
  1. XML
  2. JSON
  3. 共同点
  4. 比较
    1. 1、可读性
    2. 2、扩展性
    3. 3、编解码
    4. 4、数据体积
    5. 5、应用

XML vs. JSON

关于XML与JSON的区别和比较,网上有很多讨论,甚至争论。
有人坚为JSON终会取代XML,只是时候未到,有人认为JSON天生不如XML。
我认为各有适用场景,应该会在很长一段时间内同生共存,只能尝试梳理一些认知。

XML

全称Extensible Markup Language,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

JSON

全称JavaScript Object Notation,是一种轻量级的数据交换格式,可参见《关于JSON》一文

共同点

1、跨平台和语言
2、具有很高的可读性
3、可扩展
4、各平台和语言都有原生支持
5、纯文本
6、不作为
7、主要用于传输数据,可跨系统
8、广泛使用

比较

对应于共同点,可以梳理出比较一下不同
主要考量:是否可设计、使用是否高效、是否可转换、转换是否可逆,最后得出适用场景等

1、可读性

可读性分两类,对人的可读性,和对机器的可读性。对机器的可读性放到第3点编解码中讨论,这里只讨论对人的可读性。
网上对XML和JSON的可读性意见不一,如果举办投票可能会各获得50%的票数
个人认为对可读性的讨论应该分情境:
a. 在格式化、不使用第三方阅读软件的情况下,表示相同信息的XML比JSON阅读性强一些
因为XML开闭标签对称,树形结构清晰,更加亲人;而JSON相对更加亲机器
b. 但同时,有过XML传输相关经验的开发人员应该都体会过,例如在plsql中,以纯文本而不是xml格式查看的时候,从一个连续的XML串中,基本无法人工识别任何信息,而JSON得益于服务器客户端传输的先天特性,即使将所有信息都写作一行,同样拥有一定的可阅读能力
综上,XML的可读性略强于JSON

2、扩展性

XML:
XML中的X就代表扩展的意思,其设计理念就是具有高度的扩展性
其展现信息的核心特性为元素标签、元素属性、元素内容、树形结构,且扩展元素后不会影响解析
JSON:
JSON通过键值对以及对象嵌套,同样可以实现元素标签、元素内容和属性结构的功能
对于元素属性,可以提供一种内置的元数据的功能
JSON可以通过额外的设计(例如增加嵌套、转换时加入特殊符号标记),也可以包含任何XML的属性信息,只是在简单性和阅读性上有所损失
但有些场景XML比JSON更适合,比如随意打开一个网页的源HTML,改成JSON,工作过程和结果都不会令人满意
扩展:
对于相同标签,XML拥有顺序性,JSON同样可以实现,一般为数组,但失去了可逆能力,如果想要保留,则需要更复杂的设计。另外,当增加一个新的同名标签时,XML解析程序可以不受影响,而JSON的value可能会由字符串等变为数组,程序受到影响;另一方面,XML实现数组一般使用重复标签,或约定的分割符,而JSON天然支持数组
基本上,任何XML可以表示的数据都可以用JSON表示,任何JSON可以表示的数据XML也都可以表示
但在描述复杂结构时,JSON没有XML清晰简单
综上,XML的扩展性较强一些

3、编解码

编码:
人工编码:XML和JSON都可以轻易地通过人工手动编码
机器编码:1、XML拥有成熟的API,但JSON也成长迅速;2、XML通常需要按照设计逐个元素填充,JSON可以直接转换对象
解码:
XML解析可以使用DOM或SAX方式,其中,SAX可以逐步解析,适用于大规模数据的解析,JSON不行
除了像XML一样逐层逐个解析外,JSON还可以轻易地映射为Java等语言的內建数据结构或对象,XML不行
综上,JSON的编解码能力较强,但解析大规模数据时可能会有性能瓶颈

4、数据体积

因为JSON中不需要结束标签,额外信息少,所以往往比XML的数据体积要小,传输速率更高

5、应用

由于历史的发展,XML是web services的既定标准,广泛用于系统间的数据交换
JSON天生适合前端解析,广泛应用于服务器与客户端的数据交换,包括网页和移动端
建议:
1、对于复杂的数据结构使用XML,简单的数据结构可采用JSON
2、在互联网应用中数据传输中,提倡使用JSON
3、针对前后端的差异,可以在服务端使用XML,在前端使用JSON,两者之间的转换在服务器端完成,各取所长
对于选型,
1、首要决定因素是是否有遗留习惯,必须选择XML
2、其次看数据复杂度,如果不是特别复杂,尽量用JSON

参考:
http://www.w3school.com.cn/xml/index.asp
http://www.cnblogs.com/yank/p/4028266.html
http://bbs.csdn.net/topics/391013413