java - 解析和映射具有动态属性的 JSON 对象

标签 java jackson

因此,通过 Stackoverflow 上的研究,especially this topic ,我确定我有一个 JSON 对象字典嵌入在其他有效的 getter/setter 设置中。当我调用 API 时,属性的传统 getter/setter 运行良好,但这是因为我知道属性的名称是什么。我怎样才能让它适用于名为 errors 的对象的未知属性,该对象的格式是什么( Map<String,List> )?

API 响应:

{
    "success":false,
    "response_code":1,
    "status_message":"One or more errors has occurred.",
    "errors":{
        "171":["Some error message."],
        "555":["Some other error message."]
    }
}

我的POJO:

public class APIResponse {
    private boolean success;
    private int response_code;
    private String status_message;
    private Map<String, List> errors = new HashMap<>();
    ...
}

如何设置 getter/setter 和正确的字典格式(看起来可能是 Map<String,List> ),以便我可以开始接收这个动态 errors对象?

我正在使用Invocation.Builder将 API 响应解析为对象。

Response response= invocationBuilder.post(Entity.entity(APIRequest, MediaType.APPLICATION_JSON));
APIResponse formattedResponse = response.readEntity(APIResponse.class);

最佳答案

我的解决方案是分层解决方案。

首先,the discovery that Moxy只是不做 map 是可怕的,而是一旦我发现这是问题所在,就会重新经历。所以我不得不将我的默认序列化器从 Moxy 更改为 Jackson。通过更改 pom.xml 可以轻松完成此操作。 :

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
</dependency>

其次,我的尝试有点错误,而不是:

private Map<String, List> errors = new HashMap<>();

我真的需要:

private HashMap<String, ArrayList<String>>;

将构造函数与它对齐总是会删除数据。相反,我只是初始化映射,然后在 POJO 上创建普通的 getter/setter。

关于java - 解析和映射具有动态属性的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850426/

相关文章:

json - 根据某些条件排除 json 中的字段

java - 获取 Fasterxml Jackson ArrayNode 的子数组

java - php-java 桥中的 ClassNotFoundexception

java - 如何在 Android Studio 中导入 Apollo 客户端 (GraphQL) 生成的类

java - 如何将运算符作为参数传递?

java - Jackson 解析类不起作用

java - 将嵌套的 JSON 字符串转换为 java 对象列表

java - Jackson JSON + Java 泛型获取 LinkedHashMap

java - Tomcat、WAR 和多个操作系统

java - eclipse 从 tomcat webapp 导入项目