Fastjson 常見(jiàn)問(wèn)題

2022-05-05 15:08 更新

1. 怎么獲得fastjson?

你可以通過(guò)如下地方下載fastjson:

<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入口類(lèi)是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語(yǔ)言中最快的json庫(kù),比自稱(chēng)最快的jackson速度要快,第三方獨(dú)立測(cè)試結(jié)果看這里:fastjson性能對(duì)比 。

自行做性能測(cè)試時(shí),關(guān)閉循環(huán)引用檢測(cè)的功能。

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

這里有jackson作者cowtowncoder等人對(duì)fastjson的性能評(píng)價(jià):https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw

5. fastjson性能比gson怎樣?

fastjson比gson快大約6倍,測(cè)試結(jié)果上這里:性能測(cè)試對(duì)比。gson的g可能是“龜”拼音的縮寫(xiě),龜速的json庫(kù)。

6. fastjson可以運(yùn)行在android上么?

fastjson有專(zhuān)門(mén)的for android版本,去掉不常用的功能。jar占的字節(jié)數(shù)更小。git branch地址是:https://github.com/alibaba/fastjson/tree/android 。

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

不需要,fastjson的序列化和反序列化都不需要做特別配置,唯一的要求是,你序列化的類(lèi)符合java bean規(guī)范。

8. fastjson如何處理日期

fastjson處理日期的API很簡(jiǎn)單,例如:

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

反序列化能夠自動(dòng)識(shí)別如下日期格式:

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

9. 如何定制序列化?

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

關(guān)于定制序列化,詳細(xì)的介紹看這里:Fastjson定制系列化

10. 當(dāng)對(duì)象存在引用時(shí),序列化后的結(jié)果瀏覽器不支持,怎么辦?

使用SerializerFeature.DisableCircularReferenceDetect特性關(guān)閉引用檢測(cè)和生成。例如:

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

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

fastjson提供了BrowserCompatible這個(gè)配置,打開(kāi)之后,所有的中文都會(huì)序列化為\uXXXX這種格式,字節(jié)數(shù)會(huì)多一些,但是能兼容IE 6。

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

12. fastjson 如何處理超大對(duì)象和超大JSON文本

fastjson提供了Stream API,詳細(xì)看這里Fastjson Stream api

13. 使用@JSONField定制序列化

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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)