XML和JSON(JavaScript Object Notation)

原创文章,如需转载,请注明出处。

当我们在定义AJAX服务的时候,对于各种各样的请求,应该以什么样的数据格式来响应哪?
当然如果是请求一段Markup代码的话,HTML就是最合适的,客户端请求到数据后,就可以直接插入到前端页面中了。那如果客户端需要的是纯粹的数据的话,我们是应该提供XML哪,还是JSON?这两者各有什么优缺点和好处哪,了解了这两者的差异后我们就可以基于实际情况进行权衡取舍了。

我们从以下几个方面来进行比较:
1、客户端
在客户端通过向服务器发送XMLHttpRequest,就可以得到请求数据了,哪什么样的数据格式更容易处理哪?
 
JSON示例:

    
"author" :  "Gambardella, Matthew"
    
"title"    :  "XML Developer's Guide"
    
"genre"  :  "Computer" 
}

对于JSON数据,只需要调用JavaScript的Eval方法就可以将JSON字符串序列化成为JavaScript对象,而后就可以直接访问了。如下所示:

var  book  =  eval(request.responseText);  
alert(book.author);

XML示例:
< book >
      < author > Gambardella, Matthew </ author >
      < title > XML Developer's Guide </ title >
      < genre > Computer </ genre >
</ book >

对于XML数据,其本身是一个DOM Tree的数据结构,开发人员必须使用DOM API来访问和处理XML数据;而且DOM在各个浏览器中的实现也不尽相同,所以针对XML DOM的编程方式会变的更为复杂。参见下面的实现方式:

var  book  =  request.responseXML;   
var  authors  =  book.getElementsByTagName( " author " );  
alert(authors[
0 ].firstChild.textContent);

另外对于XMLDOM,浏览器目前还不支持类似于XPath这样的查询语句。显然对于XMLDOM数据的访问显然要比访问JSON复杂多了。

2、服务器端
在服务器端需要向客户端发送数据,什么样的数据格式处理起来更容易哪?

显然对于如何序列化或者犯序列化一个对象成为XML字符串,各种服务端的编程语言都有提供,而且还会有多种方式。例如.NET Framework就提供了 XmlSerializer类来序列化一个对象成为Xml文档,另外开发人员还可以使用XmlWriter、XMLDocument来直接构建Xml字符串。

而对于JSON这样一种数据格式则鲜有提供,这就需要开发人员自己动手或者使用一些Open Source的Library。在复杂对象的序列化或者反序列化上,由于Xml做的比较早应该会更稳定一些。

在这点上XML会优于JSON.

3、安全性
JSON 本来是JavaScript 的一个安全的子集,不会含有赋值和调用。因此在将JSON数据装换成为JavaScript对象的时候,我们包括许多JavaScript 库都使用 Eval 函数。这意味着获取的JSON数据将被解析并执行,注意是 执行,尤其有一些数据是来自用户输入的话,可能会带来意想不到的安全性问题。攻击者也可以利用这点发送畸形、恶意的 JSON数据,这样 Eval 函数就会执行这些恶意代码。

从这一点上来说也要求我们如果在使用JSON作为数据交换格式的时候,必须保障JSON安全。比较常见的办法是使用正则表达式来检查JSON数据是否包含有恶意代码关键字。

而XML则相对来讲更安全一些。

4、性能
从数据传输量上来看JSON显然要优于XML,JSON更轻量级一些,它没有像XML那样多的Open和Closing标记。同时在对数据的解析速度上,JSON也要优于XML。

5. 其他
另外从数据格式的验证角度来看的话,XML的验证技术更成熟,而目前关于JSON的验证还比较少。

转载于:https://www.cnblogs.com/tedzhao/archive/2008/07/04/1233625.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值