gpt4 book ai didi

java - 如何用 Jackson 编写扁平化列表反序列化器?

转载 作者:行者123 更新时间:2023-11-30 12:08:03 26 4
gpt4 key购买 nike

我正在尝试使用 Jackson 将特定结构的 JSON 反序列化为 Java 类。我有几个这样的类:

class A {
private int number1;
private List<X> list1;
private int number2;
}

class X {
private String field1;
private double value1;
}


class B {
private String name2;
private List<Y> list2;
}

class Y {
private String field2;
}

我从外部系统获取 JSON,如下所示:

{
"number1": 1,
"list1": {
"elements": [{
"field1": "Field 1 value 1",
"value1": 2.2
}, {
"field1": "Field 1 value 2"
}]
},
"number2": 2,
}


{
"name2": "Name 2",
"list2": {
"elements": [{
"field2": "Field 2 value 1"
}]
}
}

我想要的只是编写一个自定义反序列化器,它可以以一种通用的方式摆脱这个元素级别(我的意思是对所有类都有一个反序列化器)。是否有任何简单的方法来扩展 StdDeserializer 来实现这一点,或者我必须使用我的自定义算法编写一个全新的反序列化器?

最佳答案

你可以看看这个问题:Jackson - deserialize inner list of objects to list of one higher level这是非常相似的。我已经在那里实现了自定义反序列化器,它可用于具有内部列表的许多不同类型。您的示例 POJO 可能如下所示:

class A {
private int number1;

@JsonDeserialize(using = InnerListDeserializer.class)
private List<X> list1;
private int number2;

// getters, setters
}

编辑
如果您不想使用任何注释或自定义反序列化,则需要创建适合给定 JSONPOJO 结构。您需要创建中间 POJO:

class ListWrapper<T> {

private List<T> elements;

// getter, setter, toString, etc
}

现在,您需要以这种方式更新类 AB:

class A {
private int number1;
private ListWrapper<X> list1;
private int number2;

// getters, setters, toString
}

class B {

private String name2;
private ListWrapper<Y> list2;

// getters, setters, toString
}

关于java - 如何用 Jackson 编写扁平化列表反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54505762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com