java中JSON序列化和反序列化工具比較

  • jackson
  • gson
  • json-lib
  • fastjson
一、jackson
jackson可以輕鬆的將Java對象轉換成json對象和xml文檔,同樣也可以將json、xml轉換成Java對象。最新的版本到2.8,穩定版爲2.7
從Jackson 2.0起,核心組件包括:

  • jackson-annotations(帶註釋的數據綁定包)。
  • jackson-core(流式的解析器和生成器)。
  • jackson-databind(對象映射器,JSON樹模型)。

3、json註解
Jackson提供了一系列註解,方便對JSON序列化和反序列化進行控制,下面介紹一些常用的註解。
    - @JsonIgnore 此註解用於屬性上,作用是進行JSON操作時忽略該屬性。
    - @JsonFormat 此註解用於屬性上,作用是把Date類型直接轉化爲想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。
    - @JsonProperty 此註解用於屬性上,作用是把該屬性的名稱序列化爲另外一個名稱,如把trueName屬性序列化name,JsonProperty("name")。
    - @JsonIgnoreProperties({"name","age"}),作用在類上,用來說明屬性在序列化和反序列化時需要忽略掉。
    - @JsonIgnoreProperties(ignoreUnknown=true)也可以註明在反序列化的時候過濾掉未知的屬性,防止報錯
    - @JsonUnwrapped作用在屬性上,用來將子Json對象的屬性添加到Json對象。
    - @JsonUnwrapped作用在屬性上,2.0+版本中添加了prefix和suffix屬性,用在字段添加前後綴。
    - @JsonNaming作用在類或方法上,作用和JsonProperty名稱相同,同時也支持我們自己定製屬性命名的策略
    - @JsonSerializer(using=MyDateSerializer.class),來指定序列化的實現,一般用於各種自定義的格式轉換。
    - @JsonDeserializer(using=MyDateDeserializer.class),來指定反序列化的實現,一般用於格式的轉換。
    - @JsonPropertyOrder(alphabetic=true,value={"c","b"}),序列化時對屬性是否按字母順序排序,默認不排序,value中的是優先其他排序的屬性名稱。
    - 很多靈活好用的註解,很強大
看demo
注:1、默認的時間格式即爲timestamp形式。

優勢:
    - 依賴包較少;
    - 性能較高和功能比較完善;
    - 社區較活躍;
    - 更新較快;

二、gson
      Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。目前最新的版本爲:2.7,核心包爲:
      gson-2.7.jar
3、json註解
    -     @Expose可排除我們不想序列化的元素,但是必須保證其他的屬性都加上@Expose,排除的不加或者使用@Expose(serialize=false),同時需要重新構造Gson。
  Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); #個人覺得不太方便。
    -     @SerializedName可以將屬性名序列化爲另一個名稱,例如將email序列化爲mail,即是@SerializedName(value="mail") 
    -     @Since,Until註解可以指定屬性的版本號,通過版本號來判斷是否序列化某屬性,@Since(value=1.0)表示從此版本(1.0& lt;=,包括1.0本身)開始,都可以序列化,@Until(value=1.5)表示到此版本(<1.5,不包括1.5本身)爲止都可以序列 化,同時需要重新構造Gson的類。       
     Gson gson = new GsonBuilder().setVersion(double).create();    #double是指定的版本號

三、json-lib
    最新的版本爲2.4,用最新的jdk15,核心包爲json-lib-2.4-jdk15.jar,同時依賴以下包:
    -      commons-lang 2.4 
    -      commons-beanutils 1.7.0 
    -      commons-collections 3.2 
    -      commons-logging 1.1.1 
    -      ezmorph 1.0.6 

3、處理器
     看demo
劣勢:
    - 依賴很多第三方包;
    - json轉化爲bean有缺陷,尤其在一個類裏面出現另一個類的list或map。
    - 在功能上和性能上不能滿足互聯網的需求。

四、fastjson
Fastjson是一個Java語言編寫的JSON處理器,由阿里巴巴公司開發。
1、遵循
http://json.org標準,爲其官方網站收錄的參考實現之一。
2、功能強大,支持JDK的各種類型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
4、開源,使用Apache License 2.0協議開源。
http://code.alibabatech.com/wiki/display/FastJSON/Home
5、具有超高的性能,java世界裏沒有其他的json庫能夠和fastjson可相比了。

3、json註解
    - @JSONField
    - @JSONCreator
注:1、默認的時間格式即爲timestamp形式。
總結:
    - 在使用上gson和jackson相對較簡單;
    - 都比較容易理解;
    - 性能上序列化:fastjson>jackson>gson>json-lib;
    - 性能上反序列化:fastjson>gson>jackson>json-lib;
    - 在功能上gson>jackson>fastjson>json-lib;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章