【问题标题】:How to avoid deserialize empty JSON Array elements from JSON String while using Jackson使用 Jackson 时如何避免反序列化 JSON 字符串中的空 JSON 数组元素
【发布时间】:2019-03-04 18:31:25
【问题描述】:

我正在使用 Jackson 2 库,我正在尝试对 JSON 响应进行反序列化,如下所示:

{
    "employee": [
    {},
    {
        "Details": [
            {
                "Name": "value",
                "Lastname": "value"
            }
        ]
    }
]}

由于某些原因,我的员工数组中有一个空元素。在反序列化过程中是否可以丢弃该元素并避免反序列化它?目前,我的代码将空员工反序列化为具有空字段的员工 POJO 类。

我的代码如下:

ObjectMapper mapper = new ObjectMapper();
Empoyee[] array = mapper.readValue(json, Empoyee[].class);

PS。我无法触摸 JSON 响应。就是这样……

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    您需要在反序列化过程后编写自定义反序列化器或过滤掉empty 对象。第二种方法听起来更容易,因为除了 bean 的自定义反序列化器之外,您需要扩展已经实现的数组反序列化器 (com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer) 并过滤掉 nullempty bean。

    另见:

    【讨论】:

    • 您的回答以两种不同的方式解决了我的问题。我会接受你的回答作为我的问题的解决方案。除了第二种方法更容易的事实,您能否详细说明为什么它更可取?
    【解决方案2】:

    希望对你有所帮助。

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(Include.NON_NULL);
    mapper.setSerializationInclusion(Include.NON_EMPTY); 
    

    或者

    ObjectMapper mapper = new ObjectMapper ().configure(
            DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).setSerializationInclusion(
                    JsonInclude.Include.NON_NULL);
    

    【讨论】:

      【解决方案3】:

      首先,请确保您有 setter、getter 和构造函数,然后, 您可以使用以下内容:

      Employee employee = mapper.readValue(yourJson, Employee.class);
      

      【讨论】:

      • 我的 POJO 类中有构造函数。上面的代码创建了员工对象。和问题无关,就是我们在反序列化过程中如何丢弃空对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2019-10-31
      • 2015-02-28
      相关资源
      最近更新 更多