How can I handle a json object in a java pojo class?

I have a simple JSON statement whose type is very necessary. like this

{ actor:{name:"kumar",mbox:" kumar@gmail.com "} verb :"completed" } 

or

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

I use the POJO class to map this json string, and the pojo class code is assigned to bleow

 @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; } } 

I am using jaxb and jakson. I use webservice to handle the json expression so I use the bean class to match with json. But when I use json to display this, it gives the following exceptions

org.codehaus.jackson.map.JsonMappingException: A property named "mbox" has two entries.

Define the correct bean structure so that it maps directly to the beans class

+6
source share
2 answers

Try leaving only the @JsonProperty("mbox") ArrayList<String> listMbox; field @JsonProperty("mbox") ArrayList<String> listMbox; (don't need @JsonProperty("mbox") String mbox; ) and add Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY=true to the display configuration of the Jackson object.

Thus, during deserialization, he will be able to get both an array and a single element.

+1
source

you can use gson.

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

here jsonString can be a compressed java script object. The gson.fromJson method can map your java script key to a java property.

0
source

All Articles