反序列化嵌套json的问题

时间:2016-10-27 16:05:37

标签: json jackson deserialization

我正在开发反序列化以下JSON:

{"self":"http://members.cs.com/rest/api/user?username=abc@cs.com",
"key":"abc@cs.com",
"name":"abc@cs.com",
"emailAddress":"abc@cs.com",
"displayName":"ABC",
"active":true,
"members":{"size":1,"items":[{"name":"member-users","self":"http://members.cs.com/rest/api/user?username=abc@cs.com"}]},
"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会出现问题。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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;
    }
}

反序列化如下:

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

        String jsonString = "{\"self\": \"http://members.cs.com/rest/api/user?username=abc@cs.com\",\"key\": \"abc@cs.com\",\"name\": \"abc@cs.com\","
                + "\"emailAddress\": \"abc@cs.com\",\"displayName\": \"ABC\",\"active\": true,\"members\": {\"size\": 1,\"items\": [{"
                + "\"name\": \"member-users\",\"self\": \"http://members.cs.com/rest/api/user?username=abc@cs.com\" }]},\"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());
}