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

时间:2019-03-04 18:31:26

标签: java json jackson

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

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

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

我的代码如下:

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

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

3 个答案:

答案 0 :(得分:1)

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

另请参阅:

答案 1 :(得分:0)

首先,请确保您具有setter,getter和构造函数,之后, 您可以使用以下命令:

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

答案 2 :(得分:0)

希望它会对您有所帮助。

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