我正在尝试使用 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
}
编辑
如果您不想使用任何注释或自定义反序列化,则需要创建适合给定 JSON
的 POJO
结构。您需要创建中间 POJO
:
class ListWrapper<T> {
private List<T> elements;
// getter, setter, toString, etc
}
现在,您需要以这种方式更新类 A
和 B
:
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/