1. 程式人生 > >fastJson和Gson的比較

fastJson和Gson的比較

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;
}