我使用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);
序列化后我得到了这个:
[string 1, string 2, null, null]
如何在没有&#34; null&#34;的情况下获取JSON字符串?
[string 1, string 2]
答案 0 :(得分: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"]
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以通过以下方式阻止它:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
private String checkNullThenSerialize;
把它放在会员声明上。
或者你可以把课程级别也像:
@JsonInclude(Include.NON_NULL)
class CheckNullThenSerialize{
private String fieldData;
private String fieldNull;
}
您也可以Include.NON_EMPTY
改为@JsonInclude
来尝试Include.NON_NULL
。
对于ObjectMapper
(通过此映射器序列化的任何类中的任何空字段将被忽略):
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
查看Here's有关此主题的完整详细信息。
答案 3 :(得分:0)
建议实现自定义NullSerializer是一个好主意,在我的情况下,我不希望忽略所有空值(例如,外部集合),所以只需稍微调整就可以让两件事都有效。< / p>
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();
}
}
}
使用该自定义NullSerializer,序列化以下类:
class MyTest {
public List<String> list = Arrays.asList("hello", null, "world", null);
public Object goodNull = null;
}
生成JSON:
{ "list":["hello","world"], "goodNull":null}