2012-12-06 46 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属性。