2016-10-27 7 views
1

JSON Я работаю на десериализацию ниже 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"} 

Я создал следующие классы:

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

} 

Когда я не дает членам в качестве собственности десериализация работает нормально, и я могу видеть значения для имени, displayName, active, emailAddress. Проблема возникает с именем MemberName.

Может кто-нибудь помочь в этом?

+0

Разбор синтаксического анализа XML для этого веб-API? Я столкнулся с аналогичными проблемами, пытаясь разобрать JSON, и мне пришлось переключиться на XML, потому что он может быть более явным, чем JSON, особенно когда речь идет о сложных вложенных типах, подобных этому. Много раз веб-API может предоставлять как JSON, так и XML, вам просто нужно указать тип ответа, который вы хотите. –

+0

Анализ из XML не является вариантом, поскольку мы планируем использовать общий подход для всех вызовов службы в нашем приложении. Работа с JSON уже реализована во многих других вызовах, и я не хочу менять ее на XML для этого. – Sri

+0

Я думаю, что этот вопрос может быть связан. http://stackoverflow.com/questions/9829403/deserialize-json-to-arraylistpojo-using-jackson –

ответ

1

Это работает для меня:

Класс товары, как показано ниже:

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

Члены класса, как показано ниже:

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

класса данных, как показано ниже:

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

десериализация как бел 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

Отлично. Он работал и отвечал на многие вопросы. Спасибо вам. – Sri

Смежные вопросы