当前位置: 首页 > 知识库问答 >
问题:

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

琴正初
2023-03-14

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

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

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

我的代码如下所示:

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

附言。我不能碰JSON响应。它就是这样…

共有3个答案

阮才俊
2023-03-14

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

Employee employee = mapper.readValue(yourJson, Employee.class);
越运锋
2023-03-14

希望对您有所帮助.

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);
昝欣可
2023-03-14

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

另见:

  • 如何告诉杰克逊在反序列化过程中忽略空对象?
  • Java 8 – 从流中过滤空值
 类似资料:
  • 编辑:应你们中一些人的要求,我发布了我的真实数据结构和类。我没能让你更容易理解这个问题。 我在解决JacksonJSON数组元素时遇到问题,最终出现异常,我将在本文后面报告。 我有一个来自第三方提供商的冗长的JSON字符串: 我的Java合奏如下。 这是最外层的容器: 这是第一级容器: 这是最里面的层次: 最后,这是我的反序列化代码: 在极端综合法中,我试图将问题概括如下: 类有一个模块成员,它是

  • 我已经找了很多但仍然没有得到答案到目前为止,任何帮助是非常感谢! 我有一个简单的到字段映射,并尝试将JSON字符串读取到Java对象。 例外情况: java.lang.IllegalArgumentException:无法解析日期值“null”(格式:“dd-mmm-yyyy”):不可解析日期:“null”com.fasterxml.jackson.databind.deser.std.dateD

  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 问题内容: 类型1(docs链接): 类型2(docs链接): 尽管以上两种类型都能完成任务,但这些实现之间有什么区别? 问题答案: 构造之后,两者都调用相同的反序列化功能,因此唯一的区别是泛型类型的处理方式。 第二个是完全静态的,因此类型必须在编译类型中是已知的,并且不能改变。因此,它类似于使用基本Class文字。 第一个是动态的,因此可以用于构造因其参数设置而变化的事物。 就我个人而言,我更喜

  • 问题内容: 我有以下类,它是由Jackson映射的(简化版): 在某些情况下,服务器会返回,然后我想将name设置为空的Java String。 是否有任何Jackson注释,或者如果属性为,我应该只检查getter中的null并返回空字符串? 问题答案: 您可以在默认构造函数中或声明时进行设置: 要么

  • 我有以下由Jackson映射的类(简化版): 在某些情况下,服务器返回,然后我想将name设置为空Java字符串。 是否有任何Jackson注释,或者如果属性为,我应该只检查getter中的null并返回空字符串吗?