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: ["[email protected]", "[email protected]"], company: "[email protected]" }, 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>[email protected]</personal> <personal>[email protected]</personal> <company>[email protected]</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的文件绝对地址或相对地址。当下面的方法执行成功后,页面上就输出了 “[email protected]” 。不难看出,在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显示屏的发展趋势,能够在任何时候呈现出足够清晰的图像绝对是必要的。
参考
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。