2015-07-11 54 views
1

我有JSON對象是這樣的:如何使用jackson將JSON數組解析爲HashMap?

"stream_server":{ 
     "value":"11", 
     "list":[ 
      { 
       "id":"11", 
       "desc":"EU West" 
      }, 
      { 
       "id":"4", 
       "desc":"EU Sud + GB" 
      }, 
      { 
       "id":"9", 
       "desc":"DE 1" 
      }, 
      { 
       "id":"12", 
       "desc":"DE 2" 
      } 
     ] 
     } 

我生成的代碼爲傑克遜庫,其中「列表」是作爲對象的ArrayList

public class StreamServer { 
    @JsonProperty("value") 
    private String value; 
    @JsonProperty("list") 
    private java.util.HashMap<String, String> serverList = new HashMap<>(); 
} 

我可以將它反序列化爲如上所述的Java對象嗎?

我在查找示例代碼。

+0

做üGOOGLE了它? – Bikku

+0

可能重複[反序列化到與傑克遜自定義對象的HashMap](http://stackoverflow.com/questions/18002132/deserializing-into-a-hashmap-of-custom-objects-with-jackson) – Bikku

+0

@ GoodBadandUgly,感謝您的鏈接。也許它會幫助我。但這絕不是我的情況。例如,「id」的值「11」是關鍵,「desc」的值「EU West」是我的HashMap的值。在你的例子中,「id」是關鍵,「11」是價值,「desc」是關鍵「EU West」是價值等等。希望,這聽起來不是太複雜 – Sartre

回答

3

您可以將其反序列化爲。

public static class StreamServer { 
    @JsonProperty("value") 
    private String value; 

    @JsonProperty("list") 
    private List<Server> serverList; 

} 

public static class Server { 
    @JsonProperty("id") 
    private String id; 

    @JsonProperty("desc") 
    private String desc; 
} 

傑克遜代碼閱讀會像下面的東西:

ObjectMapper m = new ObjectMapper(); 
    StreamServer s = m.readValue(json, StreamServer.class); 
+0

我明白了,但List <>是多餘的。 – Sartre

+1

在你的JSON結構中,列表是一個列表,而不是一個Map,列表中的每個成員都是一個Map(或者一個json對象 - 取決於你如何看待它)。 –

+0

因此,我不能將「id」的值用作HashMap的鍵值,將「desc」的值用作HashMap的值? – Sartre