如何忽略 ObjectMapper 中的空对象“{}”而不是空字符串?
How to ignore empty Objects "{}" but not empty Strings in ObjectMapper?
我需要序列化(忽略空对象 ("{}"))可以包含任何内容的非结构化对象。
从版本 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": ""
}
}
我用了Include.CUSTOM
:
private static class ExludeEmptyObjects{
@Override
public boolean equals(Object o) {
if (o instanceof Map) {
return ((Map) o).size() == 0;
}
if (o instanceof Collection) {
return ((Collection) o).size() == 0;
}
return false;
}
}
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setDefaultPropertyInclusion(Value.construct(Include.NON_EMPTY, Include.CUSTOM, null, ExludeEmptyObjects.class));
我需要序列化(忽略空对象 ("{}"))可以包含任何内容的非结构化对象。
从版本 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": ""
}
}
我用了Include.CUSTOM
:
private static class ExludeEmptyObjects{
@Override
public boolean equals(Object o) {
if (o instanceof Map) {
return ((Map) o).size() == 0;
}
if (o instanceof Collection) {
return ((Collection) o).size() == 0;
}
return false;
}
}
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.setDefaultPropertyInclusion(Value.construct(Include.NON_EMPTY, Include.CUSTOM, null, ExludeEmptyObjects.class));