2012-12-06 11 views
6

Ho una semplice istruzione JSON che tipo è molto per necessità. Ti piace questaCome posso deseralizzare l'oggetto json nella classe java pojo?

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

o

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

Sto usando utilizzando la classe POJO per mappare questo codice stringa JSON e la classe POJO è dato 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; 
    } 
} 

Sto usando JAXB e Jakson. Sto implementando il webservice per gestire l'istruzione json quindi uso la classe bean per mappare con json. Ma quando uso di mappare questo JSON allora si dà le seguenti eccezioni

org.codehaus.jackson.map.JsonMappingException: proprietà con il nome "mbox" hanno due entry.

definire una struttura di fagioli adeguato in modo direttamente mappata alla classe fagioli

+0

Si prega di fornire la soluzione –

+1

don, t usare parole come "Per favore, aiutami ecc ..". invece di spiegare chiaramente il tuo problema e scrivi i tuoi sforzi su come hai provato a risolvere il tuo problema. e accetta o pubblica la tua risposta se hai trovato una soluzione. –

risposta

1

Provate a lasciare solo @JsonProperty("mbox") ArrayList<String> listMbox; campo (non è necessario @JsonProperty("mbox") String mbox;) e aggiungere Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY=true a Jackson l'oggetto mapper config.

Così nella deserializzazione sarà possibile ottenere sia come array sia come singolo elemento.

+0

ma cosa posso fare per il verbo. e questo genera anche l'eccezione. –

+0

Quale eccezione? Informazioni sul verbo: non lo so. Non puoi cambiare la sintassi/struttura di un json? Non è una soluzione molto bella, ma puoi usare '@JsonProperty (" verb ") Object objVerb;', e in fase di deserializzazione sarà in un caso String in un'altra mappa (puoi fare cast). – adsurbum

0

è possibile utilizzare gson.

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

qui jsonString può essere un oggetto script java con stringa. Il metodo gson.fromJson può associare la tua chiave di script java alla proprietà java.

Problemi correlati