2016-10-27 11 views
1

Ich arbeite den unten JSON auf Deserialisieren:Ausgabe mit Deserialisieren verschachtelten json

{"self":"http://members.cs.com/rest/api/[email protected]", 
"key":"[email protected]", 
"name":"[email protected]", 
"emailAddress":"[email protected]", 
"displayName":"ABC", 
"active":true, 
"members":{"size":1,"items":[{"name":"member-users","self":"http://members.cs.com/rest/api/[email protected]"}]}, 
"expand":"members"} 

ich die folgenden Klassen erstellt haben:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class UserList { 

private String name; 
private String emailAddress; 
private String displayName; 
private boolean active; 
List<MemberName> members = new ArrayList<>(); 

@JsonCreator 
public UserList(@JsonProperty("name") String name, @JsonProperty("emailAddress") String emailAddress, @JsonProperty("displayName") String displayName, @JsonProperty("active") boolean active, @JsonProperty("members") List<MemberName> members) { 
    this.name = name; 
    this.emailAddress = emailAddress; 
    this.displayName = displayName; 
    this.active = active; 
    this.members.addAll(groups); 
    } 

    //getters 
} 


@JsonIgnoreProperties(ignoreUnknown = true) 
public class MemberName { 
private String name; 

@JsonCreator 
public MemberName(@JsonProperty("name") String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

} 

Wenn ich nicht geben, die Mitglieder als Eigenschaft der Die Deserialisierung funktioniert einwandfrei und ich kann die Werte für den Namen, displayName, active, emailAddress sehen. Das Problem tritt mit dem MemberName auf.

Könnte jemand dabei helfen?

+0

Ist das Parsen von XML eine Option für diese Web-API? Ich habe ähnliche Probleme beim Analysieren von JSON kennengelernt und musste schließlich zu XML wechseln, da es expliziter sein kann als JSON, besonders wenn es sich um komplexe geschachtelte Typen handelt. Oftmals können Web-APIs sowohl JSON als auch XML bereitstellen. Sie müssen lediglich den gewünschten Antworttyp angeben. –

+0

Das Parsen von XML ist keine Option, da wir einen gemeinsamen Ansatz für alle Serviceaufrufe in unserer Anwendung haben. Die Arbeit mit JSON ist bereits in vielen anderen Aufrufen implementiert und ich möchte diese nicht in XML ändern. – Sri

+0

Ich denke, dass diese Frage verwandt sein kann. http://stackoverflow.com/questions/9829403/deserialize-json-to-arraylistpojo-using-jackson –

Antwort

1

Dieser arbeitete für mich:

Klasse Artikel wie folgt:

public class Items { 
    private String name; 
    private String self; 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getSelf() { 
     return self; 
    } 
    public void setSelf(String self) { 
     this.self = self; 
    } 
} 

Mitglieder Klasse wie folgt:

public class Members { 
    private int size; 
    private List<Items> items; 
    public int getSize() { 
     return size; 
    } 
    public void setSize(int size) { 
     this.size = size; 
    } 
    public List<Items> getItems() { 
     return items; 
    } 
    public void setItems(List<Items> items) { 
     this.items = items; 
    } 
} 

Datenklasse wie folgt:

public class Data { 
    private String self; 
    private String key; 
    private String name; 
    private String emailAddress; 
    private String displayName; 
    private boolean active; 
    private Members members; 
    private String expand; 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getSelf() { 
     return self; 
    } 
    public void setSelf(String self) { 
     this.self = self; 
    } 
    public String getKey() { 
     return key; 
    } 
    public void setKey(String key) { 
     this.key = key; 
    } 
    public String getEmailAddress() { 
     return emailAddress; 
    } 
    public void setEmailAddress(String emailAddress) { 
     this.emailAddress = emailAddress; 
    } 
    public String getDisplayName() { 
     return displayName; 
    } 
    public void setDisplayName(String displayName) { 
     this.displayName = displayName; 
    } 
    public boolean isActive() { 
     return active; 
    } 
    public void setActive(boolean active) { 
     this.active = active; 
    } 
    public Members getMembers() { 
     return members; 
    } 
    public void setMembers(Members members) { 
     this.members = members; 
    } 
    public String getExpand() { 
     return expand; 
    } 
    public void setExpand(String expand) { 
     this.expand = expand; 
    } 
} 

Die Deserialisierung als Bel ow:

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { 

     String jsonString = "{\"self\": \"http://members.cs.com/rest/api/[email protected]\",\"key\": \"[email protected]\",\"name\": \"[email protected]\"," 
       + "\"emailAddress\": \"[email protected]\",\"displayName\": \"ABC\",\"active\": true,\"members\": {\"size\": 1,\"items\": [{" 
       + "\"name\": \"member-users\",\"self\": \"http://members.cs.com/rest/api/[email protected]\" }]},\"expand\": \"members\"}"; 
     ObjectMapper mapper = new ObjectMapper(); 
     Data obj = mapper.readValue(jsonString,Data.class); 

     System.out.println(obj.getSelf()); 
     System.out.println(obj.getKey()); 
     System.out.println(obj.getName()); 
     System.out.println(obj.getEmailAddress()); 
     System.out.println(obj.getDisplayName()); 
     System.out.println(obj.isActive()); 
     System.out.println(obj.getMembers().getSize()); 
     System.out.println(obj.getMembers().getItems().get(0).getName()); 
     System.out.println(obj.getMembers().getItems().get(0).getSelf()); 
     System.out.println(obj.getExpand()); 
} 
+0

Ausgezeichnet. Es hat funktioniert und viele Fragen beantwortet. Danke. – Sri

Verwandte Themen