Fastjson

Fastjson

Fastjson是基于Java开发的JSON解析器和生成器,是Alibaba开源的JSON解析库。

  • 支持解析JSON格式的字符串
  • 支持将Java Bean序列化为JSON字符串,支持将JSON字符串反序列化到JavaBean上。
  • 采用“假定有序快速匹配”算法,将JSON解析的性能提升到了极致。

Fastjson比其它任何基于Java的JSON解析器和生成器都快,具体原因:

  • 自行编写类似StringBuilder的工具类SerializeWriter
  • 使用ThreadLocal来缓存buffer
  • 使用ASM来避免反射
  • 集成了JDK实现的优化算法

配置

  • 中央仓库:http://repo1.maven.org/maven2/com/alibaba/fastjson/
  • 源码地址:https://github.com/alibaba/fastjson
  • 中文Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN

在Maven中央仓库中直接下载

https://repo1.maven.org/maven2/com/alibaba/fastjson/

配置Maven依赖


    com.alibaba
    fastjson
    1.2.78

子类

Fastjson使用主要是三个对象:JSON、JSONObject、JSONArray

继承关系
说明
JSON 主要用于转换
JSONObject JSON对象,数据以键值对形式出现,实现了Map接口。
JSONArray JSON数组,存储一个个JSON对象。底层为List,主要用来操作JSON对象。

JSON

FastJson API入口类为com.alibaba.fastjson.JSON,JSON类主要用于转换

  • 将Java对象序列化为JSON字符串
  • 将JSON字符串反序列化为Java对象
静态方法 说明
JSON.parse(String text) 将JSON文本解析为JSONObject或JSONArray
JSON.parseObject(String text) 将JSON文本解析为JSONObject
JSON.parseObject(String text, Class clazz) 将JSON文本解析为JavaBean
JSON.parseArray(String text) 将JSON文本解析为JSONArray
JSON.parseArray(String text, Class clazz) 将JSON文本解析为JavaBean
JSON.toJSONString(Object o) 将JavaBean序列化为JSON文本
JSON.toJSONString(Object o, boolean prettyFormat) 将JavaBean序列化为带格式的JSON文本
JSON.toJSON(Object o) 将JavaBean转换为JSONObject或JSONArray

注解

@JSONField

@JSONField注解的作用对象是Field、Setter/Getter方法,操作时是根据Getter/Setter进行的,并不是依据Field。如果某Field是私有的,则必须具有Setter方法,否则将无法序列化。

package com.alibaba.fastjson.annotation;

public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
    int ordinal() default 0;

     // 指定字段的名称
    String name() default "";

    // 指定字段的格式,对日期格式有用
    String format() default "";

    // 是否序列化
    boolean serialize() default true;

    // 是否反序列化
    boolean deserialize() default true;
}
属性 说明
name 属性别名
format 自定义格式字符串
serialize 标注了 @JSONField(serialize=false) 的属性在序列化成JSON格式字符串的过程中,会被 fastJSON 忽略。无论其是否有值。
serialzeFeatures 自动会忽略掉值为null的属性

name

默认情况JSON字段中的名字和类的属性名是一致的,但也有特例。对类的属性添加@JSONField注解后可重新指定与该属性对应的JSON字符串中的名字。

@JSONField(name="real_name")
public String realName;

serialzeFeatures

当将一个对象转换成为JSON字符串时,Fastjson默认会自动会忽略掉其中值为null的属性,当需要完整的形式时可通过serialzeFeatures属性来设置。

@JSONField(serialzeFeatures={SerializerFeature.WriteNullNumberAsZero})
private Integer age;

@JSONField(serialzeFeatures={SerializerFeature.WriteMapNullValue})
private String emailAddress;

@JSONField(serialzeFeatures={SerializerFeature.WriteNullStringAsEmpty})
private List list;

format

当所需序列化和反序列化对象的属性为Date日期类型时,会涉及到日期时间格式,可通过@JSONField注解的format属性来自定义格式字符串。

@JSONField(format="yyyy-MM-dd")
private Date birthDate;

泛型类

例如:RESTful API返回的JSON数据,通过引入泛型类可减少大量无关的代码。

public class AjaxReturn {
  public int code;
  public String message;
  public T data;
}

你可能感兴趣的:(Fastjson)