首页 > 解决方案 > 使用 Jackson 忽略空字段和空字段/数组

问题描述

我的项目建立在 jdk1.6.0_141 上,我目前使用的是 jackson 2.7.9。下面是用于编组对象的类。

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Employee{

    private String number;
    private String department;
    private List<Project> projects;

    //getters and setters goes here
} 

我在我的 pom 文件中添加了以下依赖项

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
     <version>2.7.9</version>
</dependency>       
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.7.9</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.7.9</version>
</dependency>

我想从我的结果中删除空值和空数组,这是一个 json 字符串,但空值没有被删除。我什至用过

@JsonInclude(JsonInclude.Include.NON_NULL)

但结果还是一样。我将同样的方法应用于构建在 JDK 8 中的另一个 rproject,jackson 的版本是 2.9.2,在响应中,它仅通过添加 NON_EMPTY 来删除所有空值和空字段和数组。

@JsonInclude(JsonInclude.Include.NON_EMPTY)

有人可以指导我为什么我没有得到预期的结果。如何正确使用 JsonInclude 来跳过所有空值、空字段和空数组。

这是我调用以从资源文件夹加载 json 文件并解析的方法

    InputStream in = getClass().getResourceAsStream(
            "/EmployeeFile.json");
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;

    while ((len = in.read(buffer)) != -1) {
        os.write(buffer, 0, len);
    }
    Employee emp = JSONUtil.toObject(os.toByteArray());

对象映射器

public static Employee toObject(byte[] jsonData) throws IOException {
    Employee emp = null;
    ObjectMapper objectMapper = new ObjectMapper();
    emp = objectMapper.readValue(jsonData, Employee.class);         
    return emp;
}

标签: javajsonjacksonannotationsjackson-databind

解决方案


推荐阅读