JSON将取代XML?

JSON简介摘要

XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求XML的替代品,如:JavaScript Object Notation(JSON)。

JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。  

本文将阐述JSON在Web services设计中备受推崇的原因,以及它作为XML替代方案的主要优势和局限性。文中还会深入探讨:随着相应的Web 服务客户端选择使用JSON,如何才能便捷地在Java Web services中生成JSON输出。

JSON的来历

前先介绍一下JavaScript这门脚本语言。脚本语言自身有动态执行的天赋。即我们可以把想要执行的语句放在字符串里,通过eval()这个动态执行函数来执行。字符串里的内容会像我们写的脚本 一样被执行。

例1:

<HTML>

<HEAD>

 <TITLE>eval example 1</TITLE>

</HEAD>

<BODY>

 <script>

  str = "alert('hello')";

  eval(str);

 </script>

</BODY>

</HTML>
打开页面会弹出hello窗口。我们可以在字符串中放任何脚本语句,包括声明语句:
<HTML>

<HEAD>

 <TITLE>eval example 1</TITLE>

</HEAD>

<BODY>

 <script>

	define = "{name:'Michael',email:'17bity@gmail.com'}";

	eval("data = "+define);

	alert("name:"+data.name);

	alert("email:"+data.email);

 </script>

</BODY>

</HTML>
如果我们在后台异步传来的文本是JavaScript的声明语句,那么不是一条eval方法就能解析了?对于解析复杂的XML,这样的效率是会有大大的提高。对比一个实例,比如要从后台载入一些通讯录的信息,如果写成XML,如下:
<contact>

 <friend>

  <name>Michael</name>

  <email>17bity@gmail.com</email>

  <homepage>http://www.jialing.net</homepage>

 </friend>

 <friend>

  <name>John</name>

  <email>john@gmail.com</email>

  <homepage>http://www.john.com</homepage>

 </friend>

 <friend>

  <name>Peggy</name>

  <email>peggy@gmail.com</email>

  <homepage>http://www.peggy.com</homepage>

 </friend>

</contact>

写成JSON的格式

[{ name:"Michael",  email:17bity@gmail.com,  homepage:http://www.jiling.net   },  {  name:"John",  email:john@gmail.com,  homepage:http://www.taito.com    }, {  name:"Peggy",  email:test@gmail.com,  homepage:http://www.uiok.net    }]

简单的不只是表达上,最重要的是可以丢弃让人晕头转向的DOM解析了。因为只要符合JavaScript的声明规范, JavaScrip会自动解析好。Ajax中使用JSON的基本方法是前台载入后台声明JavaScript对象的字符串,用eval方法来将它转为实际的对象,最后通过 DHTML更新页面信息。

JSON的格式  

JSON的基本格式如下,图片来自json.org:

·对象是属性、值对的集合。一个对象的开始于"{",结束于"}"。每一个属性名和值间用":"提示,属性间用","分隔。

 

 

·数组是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。

 

·值可以是引号里的字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。

 

 

·字符串的定义和C或Java基本一致。

 

 

·数字的定义也和C或Java基本一致。

 

 

JSON剖析:优点和不足

 

优点

  乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。

  这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息:

  • 访问JSON中的名称: addressbook.name
  • 访问JSON中的地址: addressbook.address.street
  • 访问JSON中的电话号码第一位:addressbook.address.phoneNumbers[0]

  如果您具备DOM编程经验,就能很快地看出区别;新手可以参看 Document Object Model 的这一外部资源,这里提供了关于数据导航的实例。

  JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。

  此外,JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和PHP中,开发都可以方便地生成JSON(详见 参考资料)。

 

不足

  和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。

  另外,JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。尽管如此,为了消除您对这一领域可能存在的困惑,下节将介绍一些最为成熟的JSON开发。

更多参考文章:http://dev2dev.bea.com.cn/techdoc/2007/03/java-soa-introduction-json.html 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值