Fastjson将null字符串序列化为空字符串

默认情况下,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序列化特性:

  1. 基于toJSONString方法传入配置项;
  2. 为指定字段添加JSONField注解;
  3. 为指定类添加JSONType注解。

参考

https://github.com/alibaba/fastjson


---转载本站文章请注明作者和出处 996极客教程(996geek.com),请勿用于任何商业用途---

留下评论