我有一个如下所示的 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 类设计即可做到这一点的方法。
最佳答案
理想情况下,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;
}
}
}
我不确定“一行反序列化”是什么意思。如果您正在寻找更简单的替代方案,唯一能满足您要求的就是自定义解串器,它更加复杂。
关于java - 用于轻松 JSON 反序列化的 Jackson 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566653/