Java Jackson-序列化包含空元素的列表
我正在使用Jackson 2.4将对象序列化为JSON。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
当我序列化对象列表时,如果某些元素为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}