2012-02-15 410 views
2

說我有以下的JSON字符串從服務器返回:映射JSON字符串在Java中映射或HashMap的領域

{ 
    "response":{ 
     "imageInstances":{ 
      "one":{ 
       "id":"1", 
       "url":"ONE" 
      },   
      "two":{ 
       "id":"2", 
       "url":"TWO" 
      } 
     } 
    } 
} 
在Codehaus的傑克遜 @JsonProperty

,我怎樣才能得到一個HashMap對象出來的嗎?

import org.codehaus.jackson.annotate.JsonAnySetter; 
import org.codehaus.jackson.annotate.JsonProperty; 

import java.util.HashMap; 
import java.util.List; 

public class MSShow { 
    @JsonProperty("imageInstances") private HashMap<String, Temp> images;//// HOW DO YOU CONVERT IT TO HASH MAP?????? 
    @JsonAnySetter public void ignoredField(String key, Object value) { } 

    private class Temp { 
    @JsonProperty("id") private String id; 
    @JsonProperty("url") private String url; 
    @JsonAnySetter public void ignoredField(String key, Object value) { } 
    } 
} 

在一天結束的時候,我想的哈希地圖生成基於返回的JSON字符串是 (java寫的僞)

應該返回我一個臨時的對象與領域id=1url=ONE如果我叫

images.get("one") 

應該返回我場id=2url=TWO如果我叫

一個臨時對象
images.get("two") 
+0

還沒有做過任何嚴肅的鑽研或測試,但是,對於其中一個,我會說傑克遜可能在嵌套類Temp中存在一個問題:a)private,b)內部類(非靜態,因此綁定到包含「MediaSlideShow」的實例)。所以我會開始使用'Temp'' public static'。 – 2012-02-15 03:47:50

+0

你是否特別需要'HashMap'?如果不是,請考慮一個'Map ',讓傑克遜擔心要使用什麼實現。 – 2012-02-15 03:49:26

+0

感謝萌芽!謝謝您的回覆 – user1118019 2012-02-15 17:09:42

回答

3

這應該按原樣工作,只需稍作修改即可:您正在使用額外的「響應」條目。因此,通常情況下,您將使用如下POJO包裝:

class Wrapper { 
    public MSShow response; 
} 

正確映射結構。或者,您可以使用UNWRAP_ROOT_VALUE功能(從DeserializationConfig)自動執行此操作,但如果需要,則類的名稱需要匹配。

如果字段類型是(它是),結果的確將是一個HashMap。如果不是,您還可以使用:

@JsonDeserialize(as=HashMap.class) 

強制使用特定的子類型。