Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
反序列化嵌套json时出现问题_Json_Jackson_Deserialization - Fatal编程技术网

反序列化嵌套json时出现问题

反序列化嵌套json时出现问题,json,jackson,deserialization,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":"ht

我正在反序列化以下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;
}

}
@JsonIgnoreProperties(ignoreUnknown=true)
公共类用户列表{
私有字符串名称;
私有字符串电子邮件地址;
私有字符串显示名;
私有布尔活动;
列表成员=新的ArrayList();
@JsonCreator
公共用户列表(@JsonProperty(“name”)字符串名称、@JsonProperty(“emailAddress”)字符串emailAddress、@JsonProperty(“displayName”)字符串displayName、@JsonProperty(“active”)boolean active、@JsonProperty(“members”)列表成员){
this.name=名称;
this.emailAddress=电子邮件地址;
this.displayName=displayName;
这个.active=active;
this.members.addAll(组);
}
//吸气剂
}
@JsonIgnoreProperties(ignoreUnknown=true)
公共类成员名{
私有字符串名称;
@JsonCreator
public MemberName(@JsonProperty(“name”)字符串名){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
}
当我不将成员作为属性提供时,反序列化工作正常,我可以看到name、displayName、active和emailAddress的值。MemberName出现问题

有人能帮我吗?

这对我很有用:

分类项目如下:

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());
}
成员类别如下:

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());
}
反序列化过程如下所示:

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

从XML解析是这个web API的一个选项吗?我在尝试从JSON解析时遇到了类似的问题,最终我需要切换到XML,因为它可以比JSON更显式,特别是当涉及到像这样复杂的嵌套类型时。很多时候,web API可以同时提供JSON或XML,您只需指定所需的响应类型。从XML解析不是一个选项,因为我们计划对应用程序中的所有服务调用使用通用方法。JSON的工作已经在许多其他调用中实现,我不想在这次调用中将其更改为XML。杰出的它有效地回答了许多问题。谢谢你。