Json需要的类包:
commons-httpclient-3.1.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
json-lib-2.2.3-jdk13.jar
ezmorph-1.0.6.jar
commons-collections-3.2.1.jar
commons-beanutils.jar
简介:
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行 JSON 格式数据的处理。
JSON数据格式解析:
和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
用 JSON 表示一个简单的 String “ abc ”,其格式为: "abc"
Boolean 类型表示为 true 或 false 。
此外,JavaScript 中的 null 被表示为 null,注意,true、false 和 null 都没有双引号,否则将被视为一个 String 。
JSON 还可以表示一个数组对象,使用 [] 包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value,例如,以下数组包含了一个 String,Number,Boolean 和一个 null: ["abc",12345,false,null]
Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map<String, Object>,而不是 Java 的 Class 。注意 Key 只能用 String 表示。
例如,一个 Address 对象包含如下 Key-Value:
用 JSON 表示如下:
city:Beijing
street:Chaoyang Road
postcode:100025(整数)
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:
{"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
}
JavaScript处理JSON数据:
上面介绍了如何用 JSON 表示数据,接下来,我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。
先讨论如何在 Web 页面中用 JavaScript 处理 JSON 数据。
function handleJson() {
var j={"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
};
document.write(j.name);
document.write(j.address.city);
}
假定服务器返回的 JSON 数据是上文的:
{
"username":"andy",
"age":20,
"info": { "tel": "123456", "cellphone": "98765"},
"address":
[
{"city":"beijing","postcode":"222333"},
{"city":"newyork","postcode":"555666"}
]
}
只需将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了,相比 XML 需要从 DOM 中读取各种节点而言,JSON 的使用非常容易。我们需要做的仅仅是发送一个 Ajax 请求,然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理 JSON 数据的能力,例如 Prototype(一个流行的 JavaScript 库:http://prototypejs.org)提供了 evalJSON() 方法,能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量:
new Ajax.Request("http://url", {
method: "get",
onSuccess: function(transport) {
var json = transport.responseText.evalJSON();
// TODO: document.write(json.xxx);
}
});
服务器端输出 JSON 格式数据
package com.yuankai;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class TestJson {
public static void main(String[] args) {
Map map = new HashMap();
map.put("name","ChenXiao");
map.put("sex","male");
map.put("age",23);
List<Person> l = new ArrayList();
l.add(new Person("yuankai", 21));
l.add(new Person("guona", 20));
String strs[] = {"hello","hi"};
map.put("str", strs);
map.put("list", l);
//测试数组,要使用JSONArray
JSONArray mapJson0 = JSONArray.fromObject(strs);
//测试Object,Object中必须要有getter和setter方法
JSONObject mapJson1 = JSONObject.fromObject(new Person("test", 56));
//测试List
JSONArray mapJson2 = JSONArray.fromObject(l);
//测试Map
JSONObject mapJson3 = JSONObject.fromObject(map);
System.out.println(mapJson0.toString());
System.out.println(mapJson1.toString());
System.out.println(mapJson2.toString());
System.out.println(mapJson3.toString());
}
}
输出结果:
["hello","hi"]
{"age":56,"name":"test"}
[{"age":21,"name":"yuankai"},{"age":20,"name":"guona"}]
{"sex":"male","str":["hello","hi"],"age":23,"name":"ChenXiao","list":[{"age":21,"name":"yuankai"},{"age":20,"name":"guona"}]}
http://blog.csdn.net/initphp/article/details/9222731