fastjson使用简介

Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

怎么获得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.20</version>
    </dependency>

    android版本

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

    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>>() {});

    哪里找fastjson的使用例子

    fastjson的使用例子看这里:https://github.com/alibaba/fastjson/wiki/Samples-DataBind

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

fastjson性能比gson怎样?

fastjson比gson快大约6倍,测试结果上这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results 。gson的g可能是“龟”拼音的缩写,龟速的json库。

fastjson可以运行在android上么?

fastjson有专门的for android版本,去掉不常用的功能。jar占的字节数更小。git branch地址是:https://github.com/alibaba/fastjson/tree/android

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

不需要,fastjson的序列化和反序列化都不需要做特别配置,唯一的要求是,你序列化的类符合java bean规范。

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

反序列化能够自动识别如下日期格式:

关于定制序列化,详细的介绍看这里: https://github.com/alibaba/fastjson/wiki/%E5%AE%9A%E5%88%B6%E5%BA%8F%E5%88%97%E5%8C%96

当对象存在引用时,序列化后的结果浏览器不支持,怎么办?

使用SerializerFeature.DisableCircularReferenceDetect特性关闭引用检测和生成。例如:

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

IE 6不支持JSON带中文字符串,要怎么处理?

fastjson提供了BrowserCompatible这个配置,打开之后,所有的中文都会序列化为\uXXXX这种格式,字节数会多一些,但是能兼容IE 6。

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

fastjson 如何处理超大对象和超大JSON文本

fastjson提供了Stream API,详细看这里 https://github.com/alibaba/fastjson/wiki/Stream-api

使用@JSONField定制序列化

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

转自:https://github.com/alibaba/fastjson/wiki/常见问题

Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1