java - 用于轻松 JSON 反序列化的 Jackson 注释

标签 java json serialization jackson

我有一个如下所示的 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/

相关文章:

java - 使用 Spring 框架构建库或 API 好吗?

java - Android Java - 跟踪多个触摸对象/事件?

java - 如何将 cursorLoader 转换为 Loader<Object>

scala - 为什么 scala 可序列化性在具有相同构造函数参数类型的案例类中有所不同?

java - 在数组列表中,添加新变量并将现有值替换为新值

javascript - 使用 ngFor 时的 Angular 4 样式背景图像

json - 将JSON从 Controller 转换为GSP格式化html标签

json - 当我使用withformat将结果呈现为grails中的json时,为什么会得到HTTP Status 404?

php - Symfony 序列化程序返回字符串而不是 float

c# - 如何在C#中序列化一个对象并防止被篡改?