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

Java Jackson-序列化包含空元素的列表,java,jackson,Java,Jackson,我正在使用Jackson 2.4将对象序列化为JSON。 当我序列化对象列表时,如果某些元素为null,则结果JSONstring包含一些“null”字符串 如何防止“null”元素被序列化?是否有ObjectMapper的任何配置?我已经设置了“setSerializationInclusion(Include.NON_NULL)” 这是我的密码: List strings=new ArrayList(); 字符串。添加(“字符串1”); 字符串。添加(“字符串2”); strings.add

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

如何防止
“null”
元素被序列化?是否有
ObjectMapper
的任何配置?我已经设置了
“setSerializationInclusion(Include.NON_NULL)”

这是我的密码:

List strings=new ArrayList();
字符串。添加(“字符串1”);
字符串。添加(“字符串2”);
strings.add(null);
strings.add(null);
序列化后,我得到了以下结果:

[字符串1,字符串2,null,null]
如何获得没有“null”的JSON字符串

[字符串1,字符串2]
使用注释

@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));
    }
然后可以删除jsonGen.writeFieldName(“”);印刷

["string 1","string 2"]
试试下面的用法

@JsonInclude(Include.NON_NULL)

另请参阅更详细的说明。

您可以通过以下方式防止:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
私有字符串checkNullThenSerialize

把这个写在会员声明上

或者您也可以将类级别设置为:

@JsonInclude(Include.NON_NULL)
class CheckNullThenSerialize{
  private String fieldData;
  private String fieldNull;
}
您还可以尝试使用
@JsonInclude
Include.NON\u-EMPTY
更改为
Include.NON\u-NULL

对于
ObjectMapper
将忽略通过此映射器序列化的任何类中的任何空字段)):


查看此主题的全部详细信息。

建议实现自定义NullSerializer是一个好主意,在我的情况下,我不希望忽略所有null值(例如,集合外部),因此只需稍加调整,您就可以同时实现这两个功能

class NullSerializer extends JsonSerializer<Object>{
    @Override
    public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused) 
  throws IOException, JsonProcessingException {
        //any null outside of a collection will be serialized (as long as SerilizationInclusion allows nulls)
        if (!jsonGen.getOutputContext().inArray()) {
            jsonGen.writeNull();
        }
    }
}

如果不需要,为什么要添加null?这只是一个例子,在某些情况下,集合可能包含null元素,我只想知道Jackson是否能够忽略集合中的null成员,或者我必须使集合无null。NullSerializer解决了数组中null值的问题,Include.NON_EMPTY解决了跳过具有空集合的键和具有空值的键的问题。
@JsonInclude(Include.NON_NULL)
class CheckNullThenSerialize{
  private String fieldData;
  private String fieldNull;
}
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
class NullSerializer extends JsonSerializer<Object>{
    @Override
    public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused) 
  throws IOException, JsonProcessingException {
        //any null outside of a collection will be serialized (as long as SerilizationInclusion allows nulls)
        if (!jsonGen.getOutputContext().inArray()) {
            jsonGen.writeNull();
        }
    }
}
class MyTest {
    public List<String> list = Arrays.asList("hello", null, "world", null);
    public Object goodNull = null;
}
{ "list":["hello","world"], "goodNull":null}