【发布时间】:2019-08-15 09:18:01
【问题描述】:
我需要序列化(忽略空对象(“{}”))可以包含任何内容的非结构化对象。
从 2.9.X 版本开始,FasterXML 改变了它的工作逻辑 (Include.NON_EMPTY)。 在旧版本中,它可以按我的需要工作。 但现在它也忽略了空字符串。
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
假设我们有下一个 java 对象(为方便起见,它看起来像 JSON):
{
"mapA": {},
"listA": ["",
{
"emptyString": "",
"string": "some text"
},
{}
],
"emptyString": "",
"mapB": {
"emptyString": "",
"mapC": {}
}
}
将其转换为 JsonNode:
mapper.convertValue(/*our Object*/, JsonNode.class);
所需的输出(再次为方便起见,它看起来像 JSON):
{
"listA": ["",
{
"emptyString": "",
"string": "some text"
}
],
"emptyString": "",
"mapB": {
"emptyString": ""
}
}
【问题讨论】:
-
你能澄清一下你从什么开始吗?如果从 Java 开始,什么是空对象?我会认为杰克逊永远不会以特定方式处理只有空字段的非空 Java 对象。也许您可以编写一个小过滤器,从序列化结果中删除“空对象”?
-
@JPMoresmau,空对象 - 它的空地图或任何空集合
-
嗯,好的,然后文档说它使用 isEmpty() 来收集集合,使用 length()==0 来处理字符串,所以似乎没有办法忽略空地图而不是空字符串
-
@JPMoresmau,我想出了如何做到这一点。有兴趣的可以去看看=)
标签: java json jackson fasterxml