簡體   English   中英

Json字符串到HashMap無法反序列化

[英]Json string to HashMap can not deserialize

{"Messages":[{"KEY01":"VALUE01"}, {"KEY02":"VALUE02"}, {"KEY03":"VALUE03"}]}

這是我的json字符串。 我試圖將其映射到hashmap。 這就是我在做什么:

messageByLanguage = mapper.readValue(jsonString, MessageByLanguage.class);

這是我的MessageByLanguage類:

public class MessageByLanguage {

@JsonProperty("Messages")
private Map<String, String> messages = new HashMap<String, String>();

public MessageByLanguage (){};

public void setMessages(Map<String, String> messages) {
    this.messages = messages;
}

public Map<String, String> getMessages() {
    return messages;
}

can not deserialize instance of java util linkedhashmap out of start_array token

那是我得到的錯誤。 有人能告訴我我做錯了什么嗎?

試試Google Gson

跟隨Json

String json="{\"Messages\":[{\"KEY01\":\"VALUE01\"}, {\"KEY02\":\"VALUE02\"}, {\"KEY03\":\"VALUE03\"}]}";

您需要以這種方式修改解析

Gson gson=new Gson(); 
Map<String,Map<String,String>> map=new HashMap<String,Map<String,String>>();
map=(Map<String,Map<String,String>>) gson.fromJson(json, map.getClass());
System.out.println(map.keySet());
System.out.println(map.values());

現在輸出

[Messages] //Key in String
[[{KEY01=VALUE01}, {KEY02=VALUE02}, {KEY03=VALUE03}]] // Value in Map<String,String>

現在來獲取消息的一組關鍵和值

這樣迭代

for(Map.Entry<String,Map<String,String>>entry:map.entrySet()){
ArrayList<Map<String,String>>list=(ArrayList<Map<String, String>>) entry.getValue();
    for(Map<String,String>innerMap:list){
        System.out.print(innerMap.keySet()+"\t");
        System.out.println(innerMap.values());
    }
}

你的最終輸出

[KEY01] [VALUE01]
[KEY02] [VALUE02]
[KEY03] [VALUE03]

問題是您的輸入是從字符串到數組的映射,該數組是對象的集合,每個對象都有一個key-> value(至少在您的示例中)。

如果您確實需要這些key->值對的映射,那么您將需要:

  1. 讀入整個對象。 如果你真的想把它作為一個單獨的對象,那么它就是一個Map<String,List<Map<String,String>>> ,盡管你也可以創建一個處理其中一些對象的對象。
  2. 將數組轉換為地圖。 您需要自己編寫代碼,但這意味着遍歷列表並從地圖中獲取鍵值對,並將其放入新的Map中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM