![](/img/trans.png)
[英][solved]How to use Jackson ObjectMapper to deserialize json list with type metadata?
[英]Java, How can I use Jackson ObjectMapper to deserialize a double nested json list
我正在嘗試使用以下結構反序列化json對象:
{"results":{
"Assessments":{
"Assessment":[
{
"assessor":"",
"buildingName":"Emerald Palace Project",
"certBody":"",
...
頂層是一個名為“結果”的實體,其中包含“評估”,只是“評估”的列表/數組。
我嘗試了多種映射器配置組合,例如:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
但是,無論我如何進行切換,我始終會得到帶有空評估的Results對象。
這是我使用Lombok的對象類。
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
static class Results {
private Assessments assessments;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
static class Assessments {
private List<Assessment> assessments;
}
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Assessment {
private int parentId;
private String stage;
private String notes;
private String rating;
private String scheme;
}
我覺得我一定錯過了一塊。
任何見識將不勝感激。
只是要清楚一點:您寫道
[…]“評估”只是“評估”的列表/數組。
並且您的POJO反映出……那么您的JSON必須是……
{"results":{
"Assessments":{
[
{
"assessor":"",
"buildingName":"Emerald Palace Project",
"certBody":"",
...
…代替…
{"results":{
"Assessments":{
"Assessment":[
{
"assessor":"",
"buildingName":"Emerald Palace Project",
"certBody":"",
...
請直接在“評估”中關注列表。 另外請注意,您的POJO字段是小寫的,因此必須是JSON鍵。
因此,要將POJO與JSON匹配,您可以使用多種選擇:
@JsonProperty("field-name")
來匹配您的JSON密鑰 但是在每種情況下,您都必須了解有關評估/評估列表的當前沖突。
因此,由於我必須使用第三方API給我的json,因此無法更改json。
這就是我的工作方式。
首先,我必須將評估對象更改為具有唯一名稱的列表。 “ assessment”而不是“ assessments”,因為這是json響應中的拼寫方式。
@Getter
@Setter
@NoArgsConstructor
static class Assessments {
private List<Assessment> assessment;
}
此外,我還設置了ObjectMapper來忽略大小寫和未知屬性。 確保使用com.fasterxml.jackson.databind.ObjectMapper。
private static ObjectMapper getJsonMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
return mapper;
}
但是最大的變化是引入了容器類。
@Getter
@Setter
@NoArgsConstructor
private static class JsonContainer {
private Results results;
}
該類是必需的,因為它包含頂級json對象“ Results”。
在完成這些更改之后,我將Java對象置於預期的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.