Json与Xml

XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所需要返回的数据。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求`XML的替代品,如:JavaScript Object Notation(JSON)。

JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。通常AJAX通过返回XML格式的数据,然后再通过客户端复杂的JavaScript脚本解析和渲染这些XML格式的数据。JSON(读Jason)是为了能够使得数据格式成为一种标准,更简单的被JavaScript解析。

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

JSON的优点


  • 轻量级的数据交换格式
  • 人们读写更加容易
  • 易于机器的解析和生成
  • 能够通过JavaScript中eval()函数解析JSON
  • JSON支持多语言。包括:ActionScript, C, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua.

JSON语法是一种用于传输和生成数据的协定,很类似于C家族的语言,所以很容易被C家族的语言所解析。
对象:对象包含再{}之间
属性:采用Key-Value对来表示。属性之间使用逗号分开。  string : value
数组:数组存放再[]之间   [ elements ]
元素:元素之间用逗号分开
值:值可以是字符串,数字,对象,数组,true,false,null

例子:
JSON
[javascript] view plain copy print ?
  1. {"menu": {    
  2.    "id""file",  
  3.    "value""File:",    
  4.    "popup": {    
  5.      "menuitem": [  
  6.        {"value""New""onclick""CreateNewDoc()"},  
  7.        {"value""Open""onclick""OpenDoc()"},    
  8.        {"value""Close""onclick""CloseDoc()"} ]  
  9.    }  
  10. }}  
{"menu": {  
   "id": "file",
   "value": "File:",  
   "popup": {  
     "menuitem": [
       {"value": "New", "onclick": "CreateNewDoc()"},
       {"value": "Open", "onclick": "OpenDoc()"},  
       {"value": "Close", "onclick": "CloseDoc()"} ]
   }
}}


XML
  1. <menu id="file" value="File" >  
  2.    <popup>  
  3.      <menuitem value="New" onclick="CreateNewDoc()" />  
  4.      <menuitem value="Open" onclick="OpenDoc()" />  
  5.      <menuitem value="Close" onclick="CloseDoc()" />  
  6.    </popup>  
  7. </menu>  
<menu id="file" value="File" >
   <popup>
     <menuitem value="New" οnclick="CreateNewDoc()" />
     <menuitem value="Open" οnclick="OpenDoc()" />
     <menuitem value="Close" οnclick="CloseDoc()" />
   </popup>
</menu>


XML 的作用是格式化数据内容。如果我们不用XML还有什么更好的方法吗?这个答案是JSON。介绍JSON之前我先介绍一下JavaScript这门脚本语言。脚本语言自身有动态执行的天赋。即我们可以把想要执行的语句放在字符串里,通过eval()这个动态执行函数来执行。字符串里的内容会像我们写的脚本一样被执行。
  1. <HTML>  
  2. <HEAD>  
  3.  <TITLE>eval example 1</TITLE>  
  4. </HEAD>  
  5. <BODY>  
  6.  <script>  
  7.   str = "alert('hello')";  
  8.   eval(str);  
  9.  </script>  
  10. </BODY>  
  11. </HTML>    
<HTML>
<HEAD>
 <TITLE>eval example 1</TITLE>
</HEAD>
<BODY>
 <script>
  str = "alert('hello')";
  eval(str);
 </script>
</BODY>
</HTML>  


打开页面会弹出hello窗口。我们可以在字符串中放任何脚本语句,包括声明语句,等等一系列东西,比如:
  1. <HTML>  
  2. <HEAD>  
  3. <TITLE>eval example 2</TITLE>  
  4. </HEAD>  
  5. <BODY>  
  6. <script>  
  7.  define = "{name:'Michael',email:'17bity@gmail.com'}";  
  8.  eval("data = "+define);  
  9.  alert("name:"+data.name);  
  10.  alert("email:"+data.email);  
  11. </script>  
  12. </BODY>  
  13. </HTML>  
<HTML>
<HEAD>
<TITLE>eval example 2</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,这样的效率是多么大的提高啊!现在就来告诉你什么是JSON:JavaScript Object Notation。我更愿意把它翻译为JavaScript对象声明。比如要从后台载入一些通讯录的信息,如果写成XML,如下:
  1. <contact>  
  2.  <friend>  
  3.   <name>Michael</name>  
  4.   <email>17bity@gmail.com</email>  
  5.   <homepage>http://www.jialing.net</homepage>  
  6.  </friend>  
  7.  <friend>  
  8.   <name>John</name>  
  9.   <email>john@gmail.com</email>  
  10.   <homepage>http://www.john.com</homepage>  
  11.  </friend>  
  12.  <friend>  
  13.   <name>Peggy</name>  
  14.   <email>peggy@gmail.com</email>  
  15.   <homepage>http://www.peggy.com</homepage>  
  16.  </friend>  
  17. </contact>  
<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呢,就如下面:
[javascript] view plain copy print ?
  1. [  
  2. {  
  3.  name:"Michael",  
  4.  email:"17bity@gmail.com",  
  5.  homepage:"http://www.jialing.net"  
  6. },  
  7. {  
  8.  name:"John",  
  9.  email:"john@gmail.com",  
  10.  homepage:"http://www.jobn.com"  
  11. },  
  12. {  
  13.  name:"Peggy",  
  14.  email:"peggy@gmail.com",  
  15.  homepage:http://www.peggy.com/  
  16. }  
  17. ]  
[
{
 name:"Michael",
 email:"17bity@gmail.com",
 homepage:"http://www.jialing.net"
},
{
 name:"John",
 email:"john@gmail.com",
 homepage:"http://www.jobn.com"
},
{
 name:"Peggy",
 email:"peggy@gmail.com",
 homepage:http://www.peggy.com/
}
]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值