解析和映射具有动态属性的JSON对象
问题描述:
因此,通过对*的研究,especially this topic,我确定我有一个嵌入在其他工作的getter/setter设置中的JSON对象字典。当我打电话给API时,这些属性的传统getter/setter工作正常,但那是因为我知道属性的名称是什么。我怎样才能得到这个工作对象的名字为errors
的未知属性,以及该对象在(Map<String,List>
)中的格式是什么?解析和映射具有动态属性的JSON对象
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只是不做地图是可怕的,但宁愿一旦我发现问题是reliving。所以我不得不将我的默认串行器从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。
是“一些错误消息”的JSON数组或JSON对象? –
它看起来像一个字符串数组(但只有一个字符串),这个例子就是它返回的确切格式。 –