引: 使用XML向服务器发送数据的数据结构很复杂。通过串连接来创建XML串并不好,这也不是用来生成或修改XML数据结构的健壮技术。
---------------------------------------------------------------------------------------------------------------------------------------------------
JSON概述:
==========
xml 的一个替代方法是JSON,可以在www.json.org 找到。JSON是一种文本格式,它独立于具体语言,但是使用了与C
系列语言(如C,C# , Javascript等)类似的约定。JSON建立在以下两种数据结构基础上。当前几乎所有编程语言都支持这两种数据结构。
*名/值对集合。在当前编程语言中,这实现为一个对象,记录或字典。
*值的有序表。这通常实现为一个数组。
因为这些结构得到了如此众多的编程语言的支持,所以JSON是一个理想的选择,可以作为异构系统之间的一种数据转换格式。另外,由于JSON是基于标准Javascript的子集,所以在所有当前WEB浏览器上都应该是兼容的。
JSON对象是名/值对的无序集合。对象以{开始,以}结束,名/值对用冒号分隔。JSON数组是一个有序的值集合,以【开始,以】结束,数组中的值用逗号分隔。值可以是串(用双引号引起),数值,true 或false,对象,或者是数组,因此结构可以嵌套。
考虑一下employee对象简单例子。employee对象可能包含名,姓,员工号和职位等数据。使用JSON,可以如下表示employee对象实例:
var employee ={
"firstName":John
,"lastName":Doe
,"employeeNumber":123
,"title" :"Accountant"
}
然后可以使用标准点记法使用对象的属性,如下所示:
var lastName =employee.lastName; //Access the last Name
var title = employee.title; //Access the title
employee.employeeNumber = 456; //change the employee number
JSON有一点很引以为豪,就是他是一个轻量级的数据互换格式。如果用XML来描述同样的employee对象,可能是如下的麻烦:
<employee>
<firstName>John</firstName>
<lastName>Doe</lastName>
<employeeNumber>123</employeeNumber>
<title>Accountant</title>
</employee>
显然,JSON编码比XML编码简单。JSON编码比较小,所以如果在网络上发送大量数据,可能会带来显著的性能差异。
www.json.org网站列出了至少与其他编程语言的14种绑定,这说明,不论在服务器端使用何种技术,都能通过JSON与浏览器通信。
使用JSON的示例:
下面是一个简单的例子,展示了如何使用JSON将Javascript对象转换为串格式,并使用Ajax技术奖这个串发送到服务器,然后服务器根据这个串创建一个对象。这个例子中没有业务逻辑,也几乎没有用户交互,她强调的是客户端和服务器端的JSON技术。
代码清单: jsonExample.html
js/json2.js------>所需JSON的JS文件
js/jsonExample.js
servlet/JSONExample.java (需要导入org.JSON.*包)
输出结果:
过程详解:
===============================
点击按钮调用doJSON函数。这个函数首先调用getCarObject函数来返回一个新的Car对象实例,然后使用JSON javascritp库将Car对象转换为JSON串,再在警告框中显示这个串。接下来使用XMLHttpRequest对象将JSON编码的Car对象发送到服务器。
因为有可疑免费得到的JSON- Java绑定库,素以编写Java servlet来为JSON请求提供服务相当简单。更妙的是,由于对每种服务器端技术都有相应的JSON绑定,所以可以使用任何服务器端技术实现这个例子。
JSONExample servelt的doPost方法为JSON请求提供服务。首先调用readJSONStringFromRequestBody方法从请求题获得JSON串。JSONObject在对象创建时自动解析JSON串。一旦创建了JSONObject,就可以使用各个get方法来获得对象属性。
这里使用getstring 和getInt方法来获取year,make,model和color属性。这些属性连接起来构成一个串返回给浏览器,并在页面上显示。