[轉]fastjson常見問題


轉自fastjson wiki說明文檔:https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

1. 怎么獲得fastjson?

你可以通過如下地方下載fastjson:

其中x.x.x不是具體的版本號,最新版本你通過fastjson的首頁( https://github.com/alibaba/fastjson/wiki )獲得。

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的使用例子看這里:https://github.com/alibaba/fastjson/wiki/Samples-DataBind

4. fastjson的性能如何?

fastjson是目前java語言中最快的json庫,比自稱最快的jackson速度要快,第三方獨立測試結果看這里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results

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

  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倍,測試結果上這里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results 。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)

9. 如何定制序列化?

你可以使用SimplePrePropertyFilter過濾字段,詳細看這里:https://github.com/alibaba/fastjson/wiki/%E4%BD%BF%E7%94%A8SimplePropertyPreFilter%E8%BF%87%E6%BB%A4%E5%B1%9E%E6%80%A7

關於定制序列化,詳細的介紹看這里: https://github.com/alibaba/fastjson/wiki/%E5%AE%9A%E5%88%B6%E5%BA%8F%E5%88%97%E5%8C%96

10. 當對象存在引用時,序列化后的結果瀏覽器不支持,怎么辦?

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

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

11. IE 6不支持JSON帶中文字符串,要怎么處理?

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

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

12. fastjson 如何處理超大對象和超大JSON文本

fastjson提供了Stream API,詳細看這里 https://github.com/alibaba/fastjson/wiki/Stream-api

13. 使用@JSONField定制序列化

fastjson提供了使用Annotation定制序列化和反序列化的功能。https://github.com/alibaba/fastjson/wiki/JSONField


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM