2017-08-26 43 views
0

我有json字段如下所示。我怎樣才能將它反序列化爲String,String Map?不同類型的嵌套對象的java傑克遜反序列化

s:{ 
    "g":0.0, 
    "p":0.0, 
    "m":0.0, 
    "media":{ 
     "1":{"key":0,"value":0}, 
     "2":{"key":0,"value":0}, 
     "3":{"key":0,"value":0}, 
     "4":{"key":0,"value":0}, 
     ...}, 
    "pr":{ 
     "1":{"key":0,"value":0}, 
     "2":{"key":0,"value":0}, 
     "3":{"key":0,"value":0}, 
    ...} 
    } 

我已經試過這樣的

 public JsonNode s; 
     @JsonGetter("s") 
     public Map<String,String> getS() { 
      if (s == null) { 
       return null; 
      } 
      ObjectMapper mapper = new ObjectMapper(); 
      Map<String, Object> map; 
      map = mapper.convertValue(score, new TypeReference<Map<String, Object>>(){}); 
      Map<String,String> result; 
      for (Map.Entry<String, Object> entry : map.entrySet()) { 
       if(entry.getValue() instanceof String){ 
        result.put(entry.getKey(), (String) entry.getValue()); 
       } 
      } 
      return result; 
     } 

,它的測試工作,但是我收到一個錯誤的真實數據

無法反序列化java.lang.String中的實例進行[來源:UNKNOWN; START_OBJECT ] line:-1,column:-1](通過引用 鏈:java.util.LinkedHashMap [「media」])

任何建議嗎?

回答

0

根據模型

@JsonGetter("s") 
public Map<String,String> getS() 

sMap<String,String>,但JSON的media似乎是一個Object,而不是(可能是Map<String, Map<String,String>>

"media":{ 
    "1":{"key":0,"value":0}, 
    "2":{"key":0,"value":0}, 
    "3":{"key":0,"value":0}, 
    "4":{"key":0,"value":0}, 
...}, 

也許你應該使用

@JsonGetter("s") 
public Map<String,Object> getS() 

和n進一步投射對象。

+0

什麼是與我嘗試區別?我已經先轉換地圖<字符串,對象>,然後映射。我應該如何將它投入您的建議中? – Sergei

+0

@Sergei's'不是'Map ''''''''''''''''''''''''''''另外還有3層的嵌套來獲得'media'中的鍵值 – nullpointer

+0

(Map.Entry entry:map .entrySet()){result.put(entry.getKey(),entry.getValue()。toString()); } – Sergei

0

我已經解決它像下面

for (Map.Entry<String, Object> entry : map.entrySet()) {  
     result.put(entry.getKey(), entry.getValue().toString()); 
     }