默认情况下,Fastjson进行序列化时会忽略值为null的字符串,不进行序列化。 有些应用场景,我们更希望将值为null的字符串,序列化为空字符串""。 本篇将会讲解Fastjson如何支持这一功能特性,内容基于Fastjson 1.2.62版本,马上开始学习吧。
默认的序列化方式
在不进行任何配置的情况下,序列化时会忽略值为null的字符串。
public class Data {
public String a;
public String b;
}
/**
* 默认的序列化方式
*/
@Test
public void testDefault() {
Data data = new Data();
System.out.println(JSON.toJSONString(data));
}
执行结果:
{}
将值为null的String字段序列化为空字符串
有3种方法,可以实现将值为null的String字段序列化为空字符串。
方法一:基于toJSONString方法启用配置
序列化时传入SerializerFeature.WriteNullStringAsEmpty,将值为null的String字段转化为空字符串""。
/**
* 序列化时传入SerializerFeature.WriteNullStringAsEmpty,将值为null的String字段转化为空字符串""
*/
@Test
public void testWriteNullStringAsEmpty() {
Data data = new Data();
System.out.println(JSON.toJSONString(data, SerializerFeature.WriteNullStringAsEmpty));
}
执行结果:
{"a":"","b":""}
方法二:使用JSONField注解
为指定字段添加JSONField注解,将值为null的String字段转化为空字符串""。
public class Data2 {
@JSONField(serialzeFeatures = {SerializerFeature.WriteNullStringAsEmpty})
public String a;
public String b;
}
/**
* 使用JSONField注解,将值为null的String字段转化为空字符串""
*/
@Test
public void testWithJSONField() {
Data2 data = new Data2();
System.out.println(JSON.toJSONString(data));
}
执行结果:
{"a":""}
方法三:使用JSONType注解
为指定类添加JSONType注解,将值为null的String字段转化为空字符串""。
@JSONType(serialzeFeatures = {SerializerFeature.WriteNullStringAsEmpty})
public class Data3 {
public String a;
public String b;
}
/**
* 使用JSONType注解,将值为null的String字段转化为空字符串""
*/
@Test
public void testWithJSONType() {
Data3 data = new Data3();
System.out.println(JSON.toJSONString(data));
}
执行结果:
{"a":"","b":""}
小结
有时候,我们希望在序列化时,实现将值为null的String字段转化为空字符串,而不是采用默认忽略字段的方式。 本文讲解了Fastjson提供的3种实现方法,都是基于SerializerFeature.WriteNullStringAsEmpty序列化特性:
- 基于toJSONString方法传入配置项;
- 为指定字段添加JSONField注解;
- 为指定类添加JSONType注解。