我有一个JSON文件,如下所示:
{
"root": [
{
"id": "abc1",
"x": "x1",
"y": "y1"
},
{
"id": "abc2",
"x": "x2",
"y": "y2"
},
...
]
}
我想用Jackson将其反序列化为类似于以下类的对象:
Class A {
Map<String, String> x;
Map<String, String> y;
}
最后,我希望A对象内的地图看起来像:
x = {(abc1,x1),(abc2,x2)}, y = {(abc1,y1),(abc2,y2)}
有没有办法用Jackson注释这个类,以便我可以在一行中进行反序列化?如果不改变A类的设计,我无法找到办法。
答案 0 :(得分:1)
理想情况下,X和Y将分为两个带ID的对象。如果您可以重新构建JSON或Java对象以更好地满足您的需求,那么您将遵循最佳实践并且您的代码将更容易遵循 - 我知道这并不总是一种选择。
您可以做的一件事是创建一个模仿数组内部对象结构的自定义类。然后,您可以注释构造函数并传入此自定义对象的列表。像这样:
public class A {
private Map<String, String> x;
private Map<String, String> y;
@JsonCreator
public A(@JsonProperty("root") List<Entity> entities) {
for (Entity entity : entities) {
x.put(entity.getId, entity.getX());
y.put(entity.getId, entity.getY());
}
}
public static class Entity {
private String id;
private String x;
private String y;
public String getId() {
return id;
}
public String setId(String id) {
this.id = id;
}
public String getX() {
return x;
}
public String setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public String setY(String y) {
this.y = y;
}
}
}
我不确定你的意思是“在一行中反序列化”。如果您正在寻找更容易的替代方案,那么唯一能够满足您要求的是自定义解串器,这更复杂。