2012-12-06 10 views
6

Mam proste oświadczenie JSON, którego typ jest bardzo potrzebna. jak toJak mogę zdegradować obiekt json w klasie java pojo?

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

lub

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

Używam użyciu klasy POJO mapować ten ciąg json i klasy pojo kod jest podany 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; 
    } 
} 

Używam JAXB i jakson. Wdrażam webservice do obsługi instrukcji json , więc używam klasy bean do mapowania z jsonem. Ale kiedy używam do odwzorowania tego jsona, to daje on następujące wyjątki:

org.codehaus.jackson.map.JsonMappingException: właściwość o nazwie "mbox" ma dwa wpisy.

Zdefiniuj odpowiednią strukturę fasoli więc bezpośrednio mapowane do klasy ziaren

+0

Proszę podać rozwiązanie –

+1

nie używać słów takich jak "Proszę, pomóżcie mi itd.". zamiast tego jasno wyjaśnij swój problem i napisz, jak próbowałeś rozwiązać swój problem. i zaakceptuj lub opublikuj swoją odpowiedź, jeśli znajdziesz rozwiązanie. –

Odpowiedz

1

spróbować pozostawić tylko @JsonProperty("mbox") ArrayList<String> listMbox; pole (nie trzeba @JsonProperty("mbox") String mbox;) i dodać Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY=true Jackson obiekt odwzorowujący config.

Tak więc w deserializacji będzie można uzyskać zarówno tablicę jak i pojedynczy element.

+0

, ale co mogę zrobić dla czasownika. i to również generuje wyjątek. –

+0

Jaki wyjątek? O czasowniku: Nie wiem. Nie możesz zmienić składni/struktury json? To niezbyt fajne rozwiązanie, ale możesz użyć '@JsonProperty (" czasownik ") Object objVerb;', a przy deserializacji będzie to jeden przypadek Ciąg na innej mapie (możesz zrobić rzutowanie). – adsurbum

0

możesz użyć gson.

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

tutaj jsonString może być obiektem skryptowym java. Metoda gson.fromJson może zmapować twój klucz skryptowy java do właściwości java.

Powiązane problemy