【问题标题】:How to ignore empty Objects "{}" but not empty Strings in ObjectMapper?如何在 ObjectMapper 中忽略空对象“{}”而不是空字符串?
【发布时间】: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


【解决方案1】:

我用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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 2019-03-21
    • 1970-01-01
    • 2015-12-17
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多