亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Jackson 將 JSON 鍵值數組動態映射到子對象?

如何使用 Jackson 將 JSON 鍵值數組動態映射到子對象?

滄海一幻覺 2022-06-04 09:40:40
假設我們有一個如下所示的 JSON 結構:{ "field1": "val1", "field2": "v2", "f3": "v3", "f4": "v4", "arrayOfStuff": [  {   "f5": "v5",   ....   "f10": "v10"  } ], "attributes": [  {"att1": "att1"},  {"att2": "attr2"},  {"att3": "att3"} ], "options": [  "ignoreMismatchFile" ]}我們匹配的 java 類看起來像:public class Message {   @IsUniqueId   private String field1; //   private String field2;   private String field3;   private String field4;   private List<AnotherObject> f5;   @JsonProperty("attributes")   private LinkedHashMap<String, String> attributes;   private List<String> options;   ....}解析代碼如下所示:protected Message loadSavedMessageAsMessageObject(String path) throws IOException {    File file = ResourceUtils.getFile(path);    if (file.exists()) {        ObjectMapper mapper = this.getObjectMapper();        return mapper.readValue(file, Message.class);    }    return null;}我們嘗試了不同的方法來實現這一點,最初我們嘗試將屬性設置為private List<MessageAttribute> attributes;但也沒有奏效(我們根據另一個答案切換到地圖- 不起作用)我們的目標是保持屬性是動態的,而不是硬編碼的屬性列表。這就是這個MessageAttribute類的樣子:public class MessageAttribute {    private String key;    private String value;    public String getKey() {        return key;    }    public void setKey(String key) {        this.key = key;    }    public String getValue() {        return value;    }    public void setValue(String value) {        this.value = value;    }}我們目前得到的例外是:com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.LinkedHashMap` out of START_OBJECT tokenat [Source: (File); line: 32, column: 3] (through reference chain: com.org.Message["attributes"])
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

對應Message于上述 JSON 的 POJO 格式錯誤,我做了一些更改attributes應該是List of Map并且列表AnotherObject應該指向 arrayOfStuff


public class Message {

 @IsUniqueId

 private String field1; //

 private String field2;

 private String field3;

 private String field4;

 private List<AnotherObject> arrayOfStuff;  //or you can have List<Map<String,String>> arrayOfStuff

 @JsonProperty("attributes")

 private List<LinkedHashMap<String, String>> attributes; // this is list of map objects

 private List<String> options;

  ....

  }


查看完整回答
反對 回復 2022-06-04
  • 1 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號