Pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.43</version>
</dependency>
说明
Bean的属性是私有的,一定要有set,get方法,否则序列化失败。
常用方法
字符串-》JSONObject:
JSONObject可以看作特殊的Map。
public static JSONObject parseObject(String text)
JSONObject jsonObject = JSONObject.parseObject(jsonSStrtr);
Bean-》字符串:
public static String toJSONString(Object object, SerializeConfig config, SerializerFeature… features)
后面两个是可选参数。
参数一:Bean
Bean bean = new Bean();
String text = JSON.toJSONString(bean);
参数二:SerializeConfig
指定序列化策略。
SerializeConfig config = new SerializeConfig();
//配置需要格式化的Double类
config.put(Double.class, new DoubleSerializer(new DecimalFormat("#.##")));
//打包Json报文
String text = JSON.toJSONString(bean, config);
序列化策略:
DoubleSerializer:
指定double类型序列化策略。
new DoubleSerializer(new DecimalFormat("#.##");
参数三:SerializeFilter:
序列化过滤器。序列化指定特殊规则。
NameFilter
对序列化的key进行处理。
NameFilter valueFilter = new NameFilter() {
@Override
public String process(Object object, String name, Object value) {
return name + "_new";
}
};
Header header = Header.builder()
.companyId("343473947")
.build();
System.out.println("过滤前:" + JSON.toJSONString(header));
System.out.println("过滤后:" + JSON.toJSONString(header, valueFilter));
ValueFilter
参数四:SerializerFeature
指定序列化特征。JSONObject.toJSONString(user,SerializerFeature.WriteMapNullValue)
取值 | 含义 |
---|---|
WriteMapNullValue | 值为null的不进行序列化 |
@JSONField:
修饰属性。
name
额外指定序列化名称。
@JSONField(name="ID")
private int id;
alternateNames
反序列化指定别名,仅仅用于反序列化。
@JSONField(alternateNames = {"name", "Name"})
private String name;
format:
属性为日期,可以格式化日期。
@JSONField(format="yyyyMMdd")
public Date date;
serialize
指定当前字段是否序列化,默认true。
@JSONField(serialize=false)
public Date date;
ordinal:
指定序列化顺序,按照指定格式展示json字符串属性。
@JSONField(ordinal = 3)
private int f0;
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
serializeUsing
自定义序列化策略。
public static class A {
@JSONField(serializeUsing = AValueSerializer.class)
public int value;
}
public static class AValueSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
int features) throws IOException {
Integer value = (Integer) object;
String text = value + "元";
serializer.write(text);
}
}
jsonDirect
属性为字符串类型,json字符串不会被转义。
B b = new B();
b.id = 9999;
b.value = "{}";
String json = JSON.toJSONString(b);
System.out.println(json);
public static class B{
public int id;
@JSONField(jsonDirect = true)
public String value;
}
结果:{"id":"999";"value":"{}"}
@JsonFormat
对象为日期,指定日期序列化格式。
pattern
指定日期序列化格式。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
timezone
指定时区。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
对象为数字-BigDicemal
@JsonFormat(pattern = "0.00")
无小数位:0
一位小数:0.0
两位小数:0.00
千分位表示 无小数: #,##0
千分位表示 一位小数: #,##0.0
千分位表示 两位小数: #,##0.00