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