首页 > 代码库 > JSON和XML的关系

JSON和XML的关系

0.题外话

  我相信任何一个和web打交道的程序员(尤其是前端工程师们),在初次与XML邂逅时,是完全不明白它是干嘛的。而又到了后来被安排与JSON相亲时,也是糊里糊涂的。

  什么,不对么?好吧,至少,上文是我自己的亲身经历。在我实习时参与的第二个项目中,我被要求使用异步请求向服务器拿取一段JSON数据。通过浏览器的控制台,我查看服务器返回的结果,我还记得,那一刻我心中惊呼“what‘s that crap”。

  而对于异步请求,那时候我只懂得单纯地使用jQuery库的$.ajax()方法,而到后来,我尝试了自己写ajax方法,当然,它还需要慢慢积累经验来变得更完善和易用(就是你了,ajax,电光火石)。啊,抱歉,我该点到即止了。

 

1.概念

  ·JSON

  JSON(Javascript Object Notation,Javascript对象表示法)是一种轻量级的数据格式,而不是一种编程语言。它利用Javascript中某些模式来表示结构化数据,通过eval()方法,Javascript能够把这种数据格式转化为对应的js类型来使用。

  .XML

  XML(Extensible Markup Language,可扩展性标记语言)是一种用来交换数据的标记语言,而同样是标记语言的HTML(HyperText Markup Language,超文本标记语言)则是用来显示数据的标记语言。它允许用户自定义标签来标记数据和定义数据类型。

  ·联系

  JSON和XML均是可跨平台使用的,且它们都是用于交换数据所用。后者相对而言更具有历史性,所以通用性也自然地比较抢,而且它衍生出很多其他的语言,譬如SVG(这个东西我正在缓慢研究)、RSS等等。

  但由于JSON格式简单直白,且一般是压缩形式出现,所以请求文件的大小自然缩小。因此,前端工程师们应该都不会不爱它吧。

 

2.语法

  ·多变的JSON

  如果你查看一个从服务器返回来的JSON,你会发现它就像是Javascript中的字面量(literal),它可以是除undefined以外的任何基本数据类型(String、Number、Boolean和null),也可以是复杂数据类型中的对象和数组。

  例如下面用分割开的就是几种可能从服务器返回来的JSON格式:

"hello world!"

 

{	name: "linji",	email: {		personal: ["linji@xxx.com", "linji@xxx.cn"],		company: "linji@company.com"	},	learnt: [		{			name: "SVG",			status: 0		},{			name: "jQuery",			status: 0.5		}	]}

  ·标准的XML

  上面第二个JSON的例子,如果写成差不多意思的XML,格式大致如下

  

<?xml version="1.0" encoding="utf-8" ?><me>	<name>linji</name>	<email>		<personal>linji@xxx.com</personal>		<personal>linji@xxx.cn</personal>		<company>linji@company.com</company>	</email>	<learnt>		<name>SVG</name>		<status>0</status>	</learnt>	<learnt>		<name>jQuery</name>		<status>0.5</status>	</learnt></me>

  

3.优缺点

  ·JSON

  优点:

  (1)轻量,请求时对带宽的要求小

  (2)多种服务器语言都有创建JSON格式的模块、方法,便于跨平台使用和后期维护

  缺点:

  (1)在不了解JSON结构的情况下,客户端方便的编程不能够正确使用JSON

  ·XML

  优点:

  (1)格式统一,扩展性强

  (2)可读性强

  缺点:

  (1)文件大

  (2)客户端解析难度高

  (3)维护不方便

  (4)浏览器之间解析的方法不一致,导致代码重写率提高

 

4.对比

  (1).可读性方面。
  JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
  (2).可扩展性方面。
  XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
  (3).编码难度方面。
  XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
  (4).解码难度方面。
  XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
  (5).流行度方面。
XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。
  (6).解析手段方面。
  JSON和XML同样拥有丰富的解析手段。
  (7).数据体积方面。
  JSON相对于XML来讲,数据的体积小,传递的速度更快些。
  (8).数据交互方面。
  JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
  (9).数据描述方面。
  JSON对数据的描述性比XML较差。
  (10).传输速度方面。
  JSON的速度要远远快于XML。

 

5.使用

  ·JSON

  这里我只能提供前端工程师们对JSON的应用。不便之处,不能见谅也请勉强见谅。

  通过$.ajax()方法能够直接把服务器传回来的JSON转化为实际的Javascript数据类型。其内部原理是,把服务器返回的结果,通过eval(JSON),把JSON中类似字面量的内容创建出来,并作为回调方法success的arguments[0]传回给客户端,然后在回调方法内部,就能够如同是一个普通的Javascript数据类型,自由地使用这个JSON了。

  提供一个要geek们自行动手的“例子”:

  随便创建一个文件(可以不需要后缀名),用编辑器打开文件,把上面JSON的第二个例子copy进去,连同带有下面代码的html文件,一同放到服务器上(自己本地的apache也好,借助某些IDE也好,或者自己的测试服务器更棒。windows用户能够使用chrome来进行本地异步请求,具体自己查查方法)。xxx则是写有JSON的文件绝对地址或相对地址。当下面的方法执行成功后,页面上就输出了 “linji@xxx.cn” 。不难看出,在success方法里,你已经能如同操作一个js对象一般,随意“利用”那个JSON了。

$.ajax({    url: "xxx",    type: "get",    dataType: "json",    success: function (data) {        document.write(data.email.personal[1]);    }});

  ·XML

  在此暂时先不讨论XML的使用。在此引用上面某句不负责任的话。

 

6.在这之后

  当足够了解JSON后,我们就可以去尝试了解JSONP。JSONP是一种解决方案,能够让你的JSON能够跨域交换数据。

  而XML衍生出子集-SVG(Scalable Vector Graphics,可缩放矢量图形)则是一种能够生成矢量图的语言。在如今Retina显示屏的发展趋势,能够在任何时候呈现出足够清晰的图像绝对是必要的。

 

参考

SON 和 XML 优缺点的比较_兔子皮皮_新浪博客

JSON和XML的关系