fastJson和Gson的比較
阿新 • • 發佈:2018-12-30
FastJson和Gson的簡單比較
先用gson寫一個util工具來感受下.
public class JsonUtil {
private static Gson gson = new GsonBuilder().setDateFormat("EEE MMM dd yyyy HH:mm:ss zzz").create();
@SuppressWarnings({"unchecked", "rawtypes"})
public static Object readJson2Object(String json, Class className) {
return gson.fromJson(json, className);
}
@NonNull
@SuppressWarnings({"rawtypes", "unchecked"})
public static List readJson2List(String json, Class className) {
return JSON.parseArray(json, className);
List<Object> lists = new ArrayList();
try {
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(json);
JsonArray jsonArray = jsonElement.getAsJsonArray();
java.util.Iterator<JsonElement> it = jsonArray.iterator();
while (it.hasNext()) {
jsonElement = it.next();
json = jsonElement.toString();
Object obj = gson.fromJson(json, className);
lists.add(obj);
}
} catch (IllegalStateException e) {
return lists;
}
return lists;
}
@SuppressWarnings("rawtypes")
public static String readList2Json(List list) {
return gson.toJson(list);
}
public static String readObject2json(Object object) {
return gson.toJson(object);
}
可以看到,在裝換List時候,gson還是挺麻煩的,其餘都還可以接受.
再來看下用fastJson寫的情況.
import com.alibaba.fastjson.JSON;
public class JsonUtil {
public static Object readJson2Object(String json, Class className) {
return JSON.parseObject(json, className);
}
public static List readJson2List(String json, Class className) {
return JSON.parseArray(json, className);
}
public static String readList2Json(List list) {
return JSON.toJSONString(list);
}
public static String readObject2json(Object object) {
return JSON.toJSONString(object);
}
以上是使用fastJson 寫的一個util.完全可以滿足我們一般json轉化的需求,而且我們可以看到,相當的簡潔.
而且有針對List
優化過.可以快速的轉化!!
當然,兩者不僅僅只有這樣的區別,來看看效能上的
[ 測試內容請點選 ]
測試結果如下.
- JSON轉Bean,5個執行緒併發,約200位元組物件,1千萬次轉換:
比較 | fastJson | gson |
---|---|---|
吞吐量 | 64113.7 | 13952.8 |
總耗時 | 155 | 700 |
* Bean轉JSON,5個執行緒併發,約200位元組物件,1千萬次轉換:**
專案 | Jackson | gson |
---|---|---|
吞吐量 | 54802 | 17308.2 |
總耗時(秒) | 181 | 560 |
可以看到,完全fastJson完全碾壓Gson.請少年早日脫離gson這個,換上fastJson
maven地址如下:
csdn這個編輯介面也是挺貨不對板的,在編輯器看是一個樣子,最後的效果是一個樣子.跪了….就是完全不時尚的樣子
1. JSONField 介紹
package com.alibaba.fastjson.annotation;
public @interface JSONField {
// 配置序列化和反序列化的順序,1.1.42版本之後才支援
int ordinal() default 0;
// 指定欄位的名稱
String name() default "";
// 指定欄位的格式,對日期格式有用
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}
2. JSONField配置方式
FieldInfo可以配置在getter/setter方法或者欄位上。例如:
2.1 配置在getter/setter上
public class A {
private int id;
@JSONField(name="ID")
public int getId() {return id;}
@JSONField(name="ID")
public void setId(int value) {this.id = id;}
}
2.2 配置在field上
public class A {
@JSONField(name="ID")
private int id;
public int getId() {return id;}
public void setId(int value) {this.id = id;}
}
3. 使用format配置日期格式化
public class A {
// 配置date序列化和反序列使用yyyyMMdd日期格式
@JSONField(format="yyyyMMdd")
public Date date;
}
4. 使用serialize/deserialize指定欄位不序列化
public class A {
@JSONField(serialize=false)
public Date date;
}
public class A {
@JSONField(deserialize=false)
public Date date;
}
5. 使用ordinal指定欄位的順序
預設fastjson序列化一個java bean,是根據fieldName的字母序進行序列化的,你可以通過ordinal指定欄位的順序。這個特性需要1.1.42以上版本。
public static class VO {
@JSONField(ordinal = 3)
private int f0;
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
}