Fastjson 常見問題


Fastjson 常見問題清單

1. 怎麼取得fastjson?


你可以透過以下地方下載fastjson:

  • #maven中央倉庫: http://central.maven.org/maven2/com/alibaba/fastjson/
  • Sourceforge.net : https://sourceforge.net/projects/fastjson /files/
  • 在maven如何設定fastjson依賴fastjson最新版本都會發佈到maven中央倉庫,你可以直接依賴。
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.21</version>
</dependency>

android版本

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.1.55.android</version>
</dependency>

2. fastjson主要的API哪些?

fastjson入口類別是com.alibaba.fastjson.JSON,主要的API是JSON.toJSONString,和parseObject。

package com.alibaba.fastjson;
public abstract class JSON {
      public static final String toJSONString(Object object);
      public static final <T> T parseObject(String text, Class<T> clazz, Feature... features);
}


序列化:

String jsonString = JSON.toJSONString(obj);

反序列化:

VO vo = JSON.parseObject("...", VO.class);

泛型反序列化:

import com.alibaba.fastjson.TypeReference;List<VO> list = JSON.parseObject("...", new TypeReference<List<VO>>() {});

3. 哪裡找fastjson的使用範例

fastjson的使用範例看這裡:Samples-DataBind

4. fastjson的效能如何?

fastjson是目前java語言中最快的json函式庫,比自稱最快的jackson速度快,第三方獨立測試結果看這裡:fastjson效能比較 。

自行做效能測試時,關閉循環引用偵測的功能。

JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect)VO vo = JSON.parseObject("...", VO.class, Feature.DisableCircularReferenceDetect)

這裡有jackson作者cowtowncoder等人對fastjson的表現評價:https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw

5. fastjson效能比gson怎麼樣?

fastjson比gson快大約6倍,測試結果上這裡:效能測試比較。 gson的g可能是「龜」拼音的縮寫,龜速的json庫。

6. fastjson可以運行在android上麼?

fastjson有專門的for android版本,去掉不常用的功能。 jar佔的位元組數更小。 git branch網址是:https://github.com/alibaba/fastjson/tree/android 。

7. fastjson序列化的需要像json-lib一樣配置java bean的序列化麼?

不需要,fastjson的序列化和反序列化都不需要做特別配置,唯一的要求是,你序列化的類別符合java bean規格。

8. fastjson如何處理日期

fastjson處理日期的API很簡單,例如:

JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss.SSS")

使用ISO- 8601日期格式

JSON.toJSONString(obj, SerializerFeature.UseISO8601DateFormat);

全域修改日期格式

JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

反序列化能夠自動辨識下列日期格式:

  • ISO-8601日期格式
  • yyyy-MM-dd
  • ##yyyy-MM-dd HH :mm:ss
  • yyyy-MM-dd HH:mm:ss.SSS
  • 毫秒數字
  • 毫秒數字字串
  • .NET JSON日期格式
  • new Date(198293238)

你可以使用SimplePrePropertyFilter過濾字段,詳細看這裡:https://github.com/alibaba/fastjson/wiki/使用SimplePropertyPreFilter過濾屬性

關於自訂序列化,詳細的介紹看這裡:Fastjson自訂系列化

使用SerializerFeature.DisableCircularReferenceDetect特性關閉引用檢測和產生。例如:

String  jsonString = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);

fastjson提供了BrowserCompatible這個配置,打開之後,所有的中文都會序列化為\uXXXX這種格式,字節數會多一些,但是能兼容IE 6。

String  jsonString = JSON.toJSONString(obj, SerializerFeature.BrowserCompatible);

fastjson提供了Stream API,詳細看這裡Fastjson Stream api

fastjson提供了使用Annotation自訂序列化和反序列化的功能。 Fastjson JSONField