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

Jackson反序列化JSON,跳过没有必填字段的对象?

边意
2023-03-14

使用Jackson将JSON响应反序列化为DTO。

[ {
    foo : "bar",
    value : "hello world"
},
{
    foo : "bar",
    value : "hello world"
},
{
    foo : "bar",
    value : "hello world"
},
{
    foo : "bar",
} ]

使用Gson或Jackson反序列化JSON时忽略空字段

他们仍然从那个不规则的JSON对象创建一个对象。

这意味着我需要遍历这个列表,并通过实现一个清理方法删除所有不具有属性“value”的对象。

If this JSON object has all the required fields
Then create a new DTO
Else
Skip to next JSON object in response

我的带有Jackson注释的DTO:

    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public final class FooDTO {

        private final String foo;
        private final String value;

        /**
         * Constructor
         *
         * @param foo           String
         * @param value String
         */
        @JsonCreator
        public FooDTO(@JsonProperty("foo") final String foo, @JsonProperty("value") final String value) {
            this.foo = checkNotNull(foo, "foo required");
            this.value = value;
        }

        @JsonProperty("foo")
        public void setFoo(final String foo) {
            this.foo = foo;
        }

        /**
         * @return String
         */
        public String foo() {
            return foo;
        }

    etc...

给定JSON响应的结果是初始化了3个DTOs,而不是4个。

共有1个答案

楚俊逸
2023-03-14

也许下面这个类上的注释可能会有所帮助?

@JsonIgnoreProperties(ignoreUnknown

 类似资料:
  • 假设我有这样的json,我想将其反序列化为一个名为SubscriberProfile的对象。 当我使用以下代码时,它可以正常工作, 但如果json中缺少字段2,我希望objectmapper抛出和异常(可能缺少字段1和字段2)。 所以这样的json应该抛出一个异常 我曾尝试使用注释,但仅在序列化它时有效。 你知道我该怎么解决这个问题吗? 提前感谢

  • 我目前正在努力反序列化JSON数据结构,如下所示: 示例1: 示例 2: 我必须处理许多此类结构的实例。它是规则生成器的输出。我无法更改JSON的格式,我必须使用我得到的东西。该结构是递归的,可以有多个级别。 我正在使用Jackson的ObjectMapper并构建一些内部类来映射数据。 大多数实例看起来像示例1,对于那些已经很好地工作的实例,但是有一些更复杂的实例,比如示例2,实际上比示例2更复

  • 我有这样一门课: 我知道基于typeToClassId的对象obj是什么类型,不幸的是只有在运行时才知道。 我想基于typeToClassId解析出obj——这里最好的方法是什么?注释似乎已经过时了,基于ObjectMapper的东西似乎是对的,但我很难弄清楚最好的方法可能是什么。 类似于类clazz=lookUpClassBasedOnId(typeToClassId)objectMapper的

  • 我成功地将Jackson配置为序列化一个类,而不在类内部的私有字段上使用任何getter或注释 但我无法使这个非静态类的JSON字符串反序列化为一个没有任何参数化构造函数或设置器的对象。这是不是可能的--我想应该通过思考,但我不知道具体是怎么... 这里有两个测试,需要通过,以达到我的需要:

  • 我目前正在开发一个Java web应用程序,它使用Magento REST API公开的JSON数据。api返回的数据示例如下: 我的应用程序中有一个Java类,如下所示: 我想对数据进行反序列化,并将其转换为,但我总是得到以下错误: 这是我用来将JSON响应反序列化为ArrayList的语句行: 有人能分享一些见解吗?我看到一些例子,返回的JSON对象前面没有任何ID。那是因为我做错了什么吗?非

  • 我将JSON用于我的RESTful服务,并且我有JSON(作为有效负载载体格式)。 我在接口上使用。类实现。扩展 非常感谢任何帮助。