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

标签 java jackson

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

如何防止 "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);

序列化后我得到了这个:

[string 1, string 2, null, null]

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

[string 1, string 2]

最佳答案

使用 @JsonInclude注释。

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

}

编辑

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

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));
    }

NullSerializer.java

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

将打印

["string 1","string 2","",""]

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

["string 1","string 2"]

关于java - Jackson - 序列化包含空元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27246955/

相关文章:

java - excel 中的日期格式与 apache poi

json - 使用带有 Camel 的 Jackson JSON 库的异常

java - 我如何反序列化Jackson的秒数时间戳?

java - 在 Jackson 2x 中的映射器/包/类级别设置默认类型解串器

java - java中基于空格和匹配引号的正则表达式分割字符串

java - 在 Android 应用程序中查看 MS Office 文件

java - 未找到 MongoDB 排序方法

Java在application.conf中获取 boolean 环境变量

java - 如何减少在 Spring 中攻击内存中密码的表面积?

java - jackson ·塞/德塞 : Proxying an object to/from an id w/a different key