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 (opens in a new tab)