Java 如何避免在使用Jackson时从JSON字符串反序列化空JSON数组元素

Java 如何避免在使用Jackson时从JSON字符串反序列化空JSON数组元素,java,json,jackson,Java,Json,Jackson,我正在使用Jackson 2库,并尝试反序列化JSON响应,如下所示: { "employee": [ {}, { "Details": [ { "Name": "value", "Lastname": "value" } ] } ]} ObjectMapper mapper = new ObjectMapper();

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

{
    "employee": [
    {},
    {
        "Details": [
            {
                "Name": "value",
                "Lastname": "value"
            }
        ]
    }
]}
ObjectMapper mapper = new ObjectMapper();
Empoyee[] array = mapper.readValue(json, Empoyee[].class);
由于某些原因,我的employee数组中有一个空元素。在反序列化过程中,是否可以丢弃该元素并避免对其进行反序列化?目前,我的代码将空employee反序列化为带有null字段的employee POJO类

我的代码如下所示:

{
    "employee": [
    {},
    {
        "Details": [
            {
                "Name": "value",
                "Lastname": "value"
            }
        ]
    }
]}
ObjectMapper mapper = new ObjectMapper();
Empoyee[] array = mapper.readValue(json, Empoyee[].class);

另外,我无法触摸JSON响应。它是什么…

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

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

希望它能帮助你

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


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

另见:


你的回答用两种不同的方式解决了我的问题。我会接受你的回答作为解决我问题的办法。从第二种方法更容易的事实来看,你能再详细说明一下为什么它更可取吗?我的POJO类中有构造函数。上面的代码创建employee对象。这与反序列化过程中如何丢弃空对象的问题无关。