6

I have a simple JSON statement which type is very per need. like this

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

or

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

I am using using POJO class to map this json string and pojo class code is given 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 am implementing the webservice to handle the json statement so I use the bean class to map with json. But when I use to map this json then it gives the following exceptions

org.codehaus.jackson.map.JsonMappingException : property with the name "mbox" have two entry.

Define a proper bean structure so it directly mapped to the beans class

1
  • 1
    don,t use words like "Please, Help me etc..". instead of this clearly explain your problem and write your efforts that how you tried to solve your problem. and accept or post your answer if you found solution. Commented Dec 25, 2012 at 12:07

2 Answers 2

1

Try to leave only @JsonProperty("mbox") ArrayList<String> listMbox; field (don't need @JsonProperty("mbox") String mbox;) and add Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY=true to Jackson object mapper config.

So in deserialization it will be able to get as both array and single element.

Sign up to request clarification or add additional context in comments.

2 Comments

but what can i do for the verb. and this is also generate the exception.
What Exception? About verb: I don't know. Can't you change the syntax/structure of a json? It's not very nice solution but you can use @JsonProperty("verb") Object objVerb;, and on deserialization it will be in one case String in another Map (you can do cast).
0

you can use gson.

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.