2017-04-06 106 views
0

我JSON結構是這樣的:如何使用Jackson將JSON對象轉換爲Java HashMap?

{ 
    "person": 
    { 
     "name": "snoop", 
     "age": "22", 
     "sex": "male" 
    } 
} 

和豆類這樣的:

public class Person { 
    HashMap<String,String> map; 

    //getters and setters 
} 

我想從JSON所有鍵和值來填充內部地圖從Person類。 我不想從JSON每個鍵像int ageString name

我曾嘗試下面的例子,它的工作正常JSON結構如下圖所示創建豆:

{ 
    "type": "Extends", 
    "target": "application", 
    "ret": "true" 
} 

和程序是:

String jsonString = "{\"type\": \"Extends\", \"target\": \"application\", \"ret\":\"true\" }"; 

ObjectMapper mapper = new ObjectMapper(); 
try { 
    Map<String, Object> carMap = mapper.readValue(jsonString, new TypeReference<Map<String, Object>>() { 
    }); 

    for (Entry<String, Object> entry : carMap.entrySet()) { 
     System.out.println("key=" + entry.getKey() + " and value=" + entry.getValue()); 
    } 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

上面的程序工作正常,並從JSON獲取Hashmap中的值。但是,在前面提到的Hashmap的情況下:

{ 
    "person": 
    { 
     "name": "snoop", 
     "age": "22", 
     "sex": "male" 
    } 
} 

它不工作,給NullPointerException作爲哈希映射爲空。

有沒有什麼辦法可以使用Jackson API在Person類中填充Hashmap。

+0

「不起作用」 *具體怎麼*? – chrylis

+0

它給出null hasmap值。 – snoop

+0

嘗試此鏈接: http://stackoverflow.com/questions/29066196/how-to-convert-json-array-to-java-hashmap-using-jackson –

回答

2

在這裏使用JsonAnyGetterJsonAnySetter註釋。

E.g:

Perosn類:

@JsonRootName("person") 
class Person { 
    HashMap<String, String> map = new HashMap<>(); 

    @JsonAnyGetter 
    public Map<String, String> getMap() { 
     return map; 
    } 

    @JsonAnySetter 
    public void setMap(String name, String value) { 
     map.put(name, value); 
    } 

} 

反序列化邏輯:

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
Person person = mapper.readValue(jsonString, Person.class); 
相關問題