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对来表示。属性之间使用逗号分开。
数组:数组存放再[]之间
元素:元素之间用逗号分开
值:值可以是字符串,数字,对象,数组,true,false,null
例子:
JSON
- {"menu": {
- "id": "file",
- "value": "File:",
- "popup": {
- "menuitem": [
- {"value": "New", "onclick": "CreateNewDoc()"},
- {"value": "Open", "onclick": "OpenDoc()"},
- {"value": "Close", "onclick": "CloseDoc()"} ]
- }
- }}
{"menu": {
"id": "file",
"value": "File:",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"} ]
}
}}
- <menu id="file" value="File" >
- <popup>
- <menuitem value="New" onclick="CreateNewDoc()" />
- <menuitem value="Open" onclick="OpenDoc()" />
- <menuitem value="Close" onclick="CloseDoc()" />
- </popup>
- </menu>
<menu id="file" value="File" >
<popup>
<menuitem value="New" οnclick="CreateNewDoc()" />
<menuitem value="Open" οnclick="OpenDoc()" />
<menuitem value="Close" οnclick="CloseDoc()" />
</popup>
</menu>
- <HTML>
- <HEAD>
- <TITLE>eval example 1</TITLE>
- </HEAD>
- <BODY>
- <script>
- str = "alert('hello')";
- eval(str);
- </script>
- </BODY>
- </HTML>
<HTML>
<HEAD>
<TITLE>eval example 1</TITLE>
</HEAD>
<BODY>
<script>
str = "alert('hello')";
eval(str);
</script>
</BODY>
</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>
<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>
- <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>
<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>
- [
- {
- 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/
- }
- ]
[
{
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/
}
]