什麼事 JSON?
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一個子集。 JSON 採用完全獨立於語言的文本格式,但是也使用了類似於 C 語言家族的習慣(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。 這些特性使 JSON 成為理想的數據交換語言。
現在我們就來研究一下 fastJson 。
Fastjson是國內著名的電子商務互聯網公司阿里巴巴內部開發的用於 java 後台處理 json 格式數據的一個工具包,包括 「 序列化 」 和 「 反序列化 」 兩部分,它具備如下特徵:
1 ) .速度最快,測試表明, fastjson
具有極快的性能,超越任其他的 java json parser 。包括自稱最快的 jackson 。
2 ) .功能強大,完全支持 java bean 、集合、 Map 、日期、 Enum ,支持范型,支持自省。
3 ) .無依賴,能夠直接運行在 Java SE 5.0 以上版本
4 ) .支持 Android 。
5 ) .開源 (Apache 2.0)
這是 fastJson 的網址: http://code.alibabatech.com/wiki/display/FastJSON/Overview
其中包含了 json 數據處理的教程, jar 下載地址, example 樣例等。
下面給出fastJson處理json數據格式的代碼樣例:
package fastJson.test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class FastJsonTest
{
/**
* 序列化
*/
public void toJsonString()
{
User user = new User("testFastJson001", "maks", 105);
String text = JSON.toJSONString(user);
System.out.println("toJsonString()方法:text=" + text);
// 輸出結果:text={"age":105,"id":"testFastJson001","name":"maks"}
}
/**
* 反序列化為json對像
*/
public void parseJsonObject()
{
String text = "{\"age\":105,\"id\":\"testFastJson001\",\"name\":\"maks\"}";
JSONObject json = JSON.parseObject(text);
System.out.println("parseJsonObject()方法:json==" + json);
// 輸出結果:json=={"age":105,"id":"testFastJson001","name":"maks"}
}
/**
* 反序列化為javaBean對像
*/
public void parseBeanObject()
{
String text = "{\"age\":105,\"id\":\"testFastJson001\",\"name\":\"maks\"}";
User user = (User) JSON.parseObject(text, User.class);
System.out.println("parseBeanObject()方法:user==" + user.getId() + "," + user.getName() + "," + user.getAge());
// 輸出結果:user==testFastJson001,maks,105
}
/**
* 將javaBean轉化為json對像
*/
public void bean2Json()
{
User user = new User("testFastJson001", "maks", 105);
JSONObject jsonObj = (JSONObject) JSON.toJSON(user);
System.out.println("bean2Json()方法:jsonObj==" + jsonObj);
// 輸出結果:jsonObj=={"age":105,"id":"testFastJson001","name":"maks"}
}
/**
* 全序列化 直接把java bean序列化為json文本之後,能夠按照原來的類型反序列化回來。支持全序列化,需要打開SerializerFeature.WriteClassName特性
*/
public void parseJSONAndBeanEachother()
{
User user = new User("testFastJson001", "maks", 105);
SerializerFeature[] featureArr = { SerializerFeature.WriteClassName };
String text = JSON.toJSONString(user, featureArr);
System.out.println("parseJSONAndBeanEachother()方法:text==" + text);
// 輸出結果:text=={"@type":"fastJson.test.User","age":105,"id":"testFastJson001","name":"maks"}
User userObj = (User) JSON.parse(text);
System.out.println("parseJSONAndBeanEachother()方法:userObj==" + userObj.getId() + "," + userObj.getName() + "," + userObj.getAge());
// 輸出結果:userObj==testFastJson001,maks,105
}
public static void main(String[] args)
{
FastJsonTest test = new FastJsonTest();
// 序列化
test.toJsonString();
// 反序列化為json對像
test.parseJsonObject();
// 反序列化為javaBean對像
test.parseBeanObject();
// 將javaBean轉化為json對像
test.bean2Json();
// 全序列化
test.parseJSONAndBeanEachother();
}
}
控制台輸出結果:
parseJsonObject()方法:json=={"age":105,"id":"testFastJson001","name":"maks"}
parseBeanObject()方法:user==testFastJson001,maks,105
bean2Json()方法:jsonObj=={"age":105,"id":"testFastJson001","name":"maks"}
parseJSONAndBeanEachother()方法:text=={"@type":"fastJson.test.User","age":105,"id":"testFastJson001","name":"maks"}
parseJSONAndBeanEachother()方法:userObj==testFastJson001,maks,105
附:javaBean類User.java
package fastJson.test;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private int age;
public User() {
super();
}
public User(String id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}