Jackson-序列化包含空元素的列表

toa*_*ndv 5 java jackson

我正在使用Jackson 2.4将对象序列化为JSON。
当我序列化对象列表时,如果某些元素为null,则结果JSON字符串包含一些“ null”字符串。

如何防止"null"元素被序列化?有什么配置ObjectMapper吗?我已经设定好了"setSerializationInclusion(Include.NON_NULL)"

这是我的代码:

List<String> strings = new ArrayList<>();
strings.add("string 1");
strings.add("string 2");
strings.add(null);
strings.add(null);
Run Code Online (Sandbox Code Playgroud)

序列化后,我得到了:

[string 1, string 2, null, null]
Run Code Online (Sandbox Code Playgroud)

如何获取不带“ null”的JSON字符串?

[string 1, string 2]
Run Code Online (Sandbox Code Playgroud)

Ken*_*man 5

使用@JsonInclude注释。

@JsonInclude(Include.NON_NULL)
class Foo {
  String bar;

}
Run Code Online (Sandbox Code Playgroud)

编辑

您也可以创建自己的序列化程序。
例如 :

public static void main(String[] args) throws JsonProcessingException {

        List<String> strings = new ArrayList<>();
        strings.add("string 1");
        strings.add("string 2");
        strings.add(null);
        strings.add(null);

        ObjectMapper mapper=new ObjectMapper();
        mapper.getSerializerProvider().setNullValueSerializer(new NullSerializer());
        System.out.println(mapper.writeValueAsString(strings));
    }
Run Code Online (Sandbox Code Playgroud)

空序列化程序

class NullSerializer extends JsonSerializer<Object>
{
  @Override
  public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused) 
      throws IOException, JsonProcessingException
  {
    jsonGen.writeFieldName("");
  }
}
Run Code Online (Sandbox Code Playgroud)

会打印

["string 1","string 2","",""]
Run Code Online (Sandbox Code Playgroud)

然后你可以删除 jsonGen.writeFieldName(""); 打印

["string 1","string 2"]
Run Code Online (Sandbox Code Playgroud)