2012-12-06 65 views
6

我有一個簡單的JSON語句,哪種類型是非常需要的。這樣我怎樣才能deseralize JSON對象在Java POJO類?

{ 
     actor:{name:"kumar",mbox:"[email protected]"} 
     verb :"completed" 
    } 

{ 
     actor:{name:["kumar","manish"],mbox:["[email protected]","[email protected]"]} 
     verb :{ 
      "id" : "http://adlnet.gov/expapi/verbs/completed", 
     "display" : { 
      "en-US" : "completed" 
     } 
    } 

我使用POJO類來映射這個JSON字符串和POJO類代碼中使用的

@JsonProperty("actor") 
Actor actor; 
@JsonProperty("verb") 
Verb objVerb; 
@JsonProperty("verb") 
String verb; 
public Actor getActor() { 
    return actor; 
} 
public void setActor(Actor actor) { 
    this.actor = actor; 
} 
public Verb getObjVerb() { 
    return objVerb; 
} 
public void setObjVerb(Verb objVerb) { 
    this.objVerb = objVerb; 
} 
@JsonIgnore 
public String getVerb() { 
    return verb; 
} 
@JsonIgnore 
public void setVerb(String verb) { 
    this.verb = verb; 
} 
public static class Actor { 
    String objectType; 
    @JsonProperty("name") 
    ArrayList<String> listName; 
    @JsonProperty("name") 
    String name; 
    @JsonProperty("mbox") 
    ArrayList<String> listMbox; 
    @JsonProperty("mbox") 
    String mbox; 
    @JsonProperty("mbox_sha1sum") 
    ArrayList<String> Listmbox_sha1sum; 
    @JsonProperty("mbox_sha1sum") 
    String mbox_sha1sum; 
    @JsonProperty("openid") 
    String openid; 
    @JsonProperty("account") 
    Account account; 
    public String getObjectType() { 
     return objectType; 
    } 

    public void setObjectType(String objectType) { 
     this.objectType = objectType; 
    } 

    public ArrayList<String> getListName() { 
     return listName; 
    } 

    public void setListName(ArrayList<String> listName) { 
     this.listName = listName; 
    } 
    @JsonIgnore 
    public String getName() { 
     return name; 
    } 
    @JsonIgnore 
    public void setName(String name) { 
     this.name = name; 
    } 

    public ArrayList<String> getListMbox() { 
     return listMbox; 
    } 

    public void setListMbox(ArrayList<String> listMbox) { 
     this.listMbox = listMbox; 
    } 
    @JsonIgnore 
    public String getMbox() { 
     return mbox; 
    } 
    @JsonIgnore 
    public void setMbox(String mbox) { 
     this.mbox = mbox; 
    } 

    public ArrayList<String> getListmbox_sha1sum() { 
     return Listmbox_sha1sum; 
    } 

    public void setListmbox_sha1sum(ArrayList<String> listmbox_sha1sum) { 
     Listmbox_sha1sum = listmbox_sha1sum; 
    } 
    @JsonIgnore 
    public String getMbox_sha1sum() { 
     return mbox_sha1sum; 
    } 
    @JsonIgnore 
    public void setMbox_sha1sum(String mbox_sha1sum) { 
     this.mbox_sha1sum = mbox_sha1sum; 
    } 

    public String getOpenid() { 
     return openid; 
    } 

    public void setOpenid(String openid) { 
     this.openid = openid; 
    } 

    public Account getAccount() { 
     return account; 
    } 

    public void setAccount(Account account) { 
     this.account = account; 
    } 

    public static class Account { 
     @JsonProperty("homePage") 
     String homePage; 
     @JsonProperty("name") 
     String name; 
     public String getHomePage() { 
      return homePage; 
     } 
     public void setHomePage(String homePage) { 
      this.homePage = homePage; 
     } 
     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 
    } 
} 
public static class Verb { 
    String id; 
    Map<String,String> display; 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public Map<String, String> getDisplay() { 
     return display; 
    } 
    public void setDisplay(Map<String, String> display) { 
     this.display = display; 
    } 
} 

我使用JAXB和jakson給出bleow。我正在實現web服務來處理json語句 ,所以我使用bean類來映射json。但是,當我使用映射此json時,它給出以下例外

org.codehaus.jackson.map.JsonMappingException:名稱爲「mbox」的屬性有兩個條目。

定義一個適當的豆結構,所以它直接映射到豆類

+0

請提供解決方案 –

+1

不要使用「Please,Help me etc」等字樣。而不是這清楚地解釋你的問題,並寫下你的努力,你如何試圖解決你的問題。如果您找到解決方案,請接受或發佈您的答案。 –

回答

1

試圖離開僅@JsonProperty("mbox") ArrayList<String> listMbox;場(不需要@JsonProperty("mbox") String mbox;) 並添加Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY=true傑克遜對象映射器配置。

所以在反序列化中它將能夠同時獲得數組和單個元素。

+0

但我能爲動詞做些什麼。這也會產生異常。 –

+0

什麼例外?關於動詞:我不知道。你不能改變json的語法/結構嗎?這不是很好的解決方案,但是你可以使用@JsonProperty(「verb」)Object objVerb;',而在反序列化中,它將在另一個Map中的String中進行(你可以進行轉換)。 – adsurbum

0

你可以使用gson。

class cls = gson.fromJson(jsonString,clazz);

這裏jsonString可以被字符串化的java腳本對象。 gson.fromJson方法可以將您的java腳本鍵映射到java屬性。