fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

序列化

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

使用@JSONField定制序列化

注解定义

注意:1、若属性是私有的,必须有set*方法。否则无法反序列化。

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

配置在field上

 public class A {
      @JSONField(name="ID")
      private int id;
 
      public int getId() {return id;}
      public void setId(int value) {this.id = id;}
 }

使用serialize/deserialize指定字段不序列化

 public class A {
      @JSONField(serialize=false)
      public Date date;
 }

 public class A {
      @JSONField(deserialize=false)
      public Date date;
 }

使用fastjson的链式api

JSONObject object = new JSONObject()
  .fluentPut("a", "A")
  .fluentPut("b", "B");

基于JSON.parseObject和BeanUtils.copyProperties自动序列化

@Data
class DataConfig {

    private String strVal;

    private int intVal;

    public void received(String data) {
        DataConfig conf = JSON.parseObject(data, DataConfig.class);
        BeanUtils.copyProperties(conf, this);
    }
}

参考