Deserializing nested JSON string using GSON

后端 未结 1 1058
独厮守ぢ
独厮守ぢ 2021-01-22 23:19

All, I have the following JSON output/string (its a response from JIRA API):

{
    \"expand\": \"names,schema\",
    \"startAt\": 0,
    \"maxResult         


        
1条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-22 23:59

    Try this -

    AvatarUrls.java

    public class AvatarUrls {
        private String _48x48;
        private String _24x24;
        private String _16x16;
        private String _32x32;
        public String get_48x48() {
            return _48x48;
        }
        public void set_48x48(String _48x48) {
            this._48x48 = _48x48;
        }
        public String get_24x24() {
            return _24x24;
        }
        public void set_24x24(String _24x24) {
            this._24x24 = _24x24;
        }
        public String get_16x16() {
            return _16x16;
        }
        public void set_16x16(String _16x16) {
            this._16x16 = _16x16;
        }
        public String get_32x32() {
            return _32x32;
        }
        public void set_32x32(String _32x32) {
            this._32x32 = _32x32;
        }
        @Override
        public String toString() {
            return "AvatarUrls [_48x48=" + _48x48 + ", _24x24=" + _24x24
                    + ", _16x16=" + _16x16 + ", _32x32=" + _32x32 + "]";
        }
    }
    

    Example.java

    import java.util.ArrayList;
    import java.util.List;
    
    public class Example {
        private String expand;
        private Integer startAt;
        private Integer maxResults;
        private Integer total;
        private List issues = new ArrayList();
        public String getExpand() {
            return expand;
        }
        public void setExpand(String expand) {
            this.expand = expand;
        }
        public Integer getStartAt() {
            return startAt;
        }
        public void setStartAt(Integer startAt) {
            this.startAt = startAt;
        }
        public Integer getMaxResults() {
            return maxResults;
        }
        public void setMaxResults(Integer maxResults) {
            this.maxResults = maxResults;
        }
        public Integer getTotal() {
            return total;
        }
        public void setTotal(Integer total) {
            this.total = total;
        }
        public List getIssues() {
            return issues;
        }
        public void setIssues(List issues) {
            this.issues = issues;
        }
        @Override
        public String toString() {
            return "Example [expand=" + expand + ", startAt=" + startAt
                    + ", maxResults=" + maxResults + ", total=" + total
                    + ", issues=" + issues + "]";
        }
    }
    

    Fields.java

    import java.util.ArrayList;
    import java.util.List;
    
    public class Fields {
        private Issuetype issuetype;
        private Integer timespent;
        private Integer aggregatetimespent;
        private Object resolution;
        private Object customfield11201;
        private Project project;
        private List issuelinks = new ArrayList();
        public Issuetype getIssuetype() {
            return issuetype;
        }
        public void setIssuetype(Issuetype issuetype) {
            this.issuetype = issuetype;
        }
        public Integer getTimespent() {
            return timespent;
        }
        public void setTimespent(Integer timespent) {
            this.timespent = timespent;
        }
        public Integer getAggregatetimespent() {
            return aggregatetimespent;
        }
        public void setAggregatetimespent(Integer aggregatetimespent) {
            this.aggregatetimespent = aggregatetimespent;
        }
        public Object getResolution() {
            return resolution;
        }
        public void setResolution(Object resolution) {
            this.resolution = resolution;
        }
        public Object getCustomfield11201() {
            return customfield11201;
        }
        public void setCustomfield11201(Object customfield11201) {
            this.customfield11201 = customfield11201;
        }
        public Project getProject() {
            return project;
        }
        public void setProject(Project project) {
            this.project = project;
        }
        public List getIssuelinks() {
            return issuelinks;
        }
        public void setIssuelinks(List issuelinks) {
            this.issuelinks = issuelinks;
        }
        @Override
        public String toString() {
            return "Fields [issuetype=" + issuetype + ", timespent=" + timespent
                    + ", aggregatetimespent=" + aggregatetimespent
                    + ", resolution=" + resolution + ", customfield11201="
                    + customfield11201 + ", project=" + project + ", issuelinks="
                    + issuelinks + "]";
        }
    }
    

    Issue.java

    public class Issue {
        private String expand;
        private String id;
        private String self;
        private String key;
        private Fields fields;
        public String getExpand() {
            return expand;
        }
        public void setExpand(String expand) {
            this.expand = expand;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        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 Fields getFields() {
            return fields;
        }
        public void setFields(Fields fields) {
            this.fields = fields;
        }
        @Override
        public String toString() {
            return "Issue [expand=" + expand + ", id=" + id + ", self=" + self
                    + ", key=" + key + ", fields=" + fields + "]";
        }
    }
    

    Issuelink.java

    public class Issuelink {
        private String id;
        private String self;
        private Type type;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getSelf() {
            return self;
        }
        public void setSelf(String self) {
            this.self = self;
        }
        public Type getType() {
            return type;
        }
        public void setType(Type type) {
            this.type = type;
        }
        @Override
        public String toString() {
            return "Issuelink [id=" + id + ", self=" + self + ", type=" + type
                    + "]";
        }
    }
    

    Issuetype.java

    public class Issuetype {
        private String self;
        private String id;
        private String description;
        private String iconUrl;
        private String name;
        private Boolean subtask;
        private Integer avatarId;
        public String getSelf() {
            return self;
        }
        public void setSelf(String self) {
            this.self = self;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public String getIconUrl() {
            return iconUrl;
        }
        public void setIconUrl(String iconUrl) {
            this.iconUrl = iconUrl;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Boolean getSubtask() {
            return subtask;
        }
        public void setSubtask(Boolean subtask) {
            this.subtask = subtask;
        }
        public Integer getAvatarId() {
            return avatarId;
        }
        public void setAvatarId(Integer avatarId) {
            this.avatarId = avatarId;
        }
        @Override
        public String toString() {
            return "Issuetype [self=" + self + ", id=" + id + ", description="
                    + description + ", iconUrl=" + iconUrl + ", name=" + name
                    + ", subtask=" + subtask + ", avatarId=" + avatarId + "]";
        }
    }
    

    Project.java

    public class Project {
        private String self;
        private String id;
        private String key;
        private String name;
        private AvatarUrls avatarUrls;
        public String getSelf() {
            return self;
        }
        public void setSelf(String self) {
            this.self = self;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getKey() {
            return key;
        }
        public void setKey(String key) {
            this.key = key;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public AvatarUrls getAvatarUrls() {
            return avatarUrls;
        }
        public void setAvatarUrls(AvatarUrls avatarUrls) {
            this.avatarUrls = avatarUrls;
        }
        @Override
        public String toString() {
            return "Project [self=" + self + ", id=" + id + ", key=" + key
                    + ", name=" + name + ", avatarUrls=" + avatarUrls + "]";
        }
    }
    

    Type.java

    public class Type {
        private String id;
        private String name;
        private String inward;
        private String outward;
        private String self;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getInward() {
            return inward;
        }
        public void setInward(String inward) {
            this.inward = inward;
        }
        public String getOutward() {
            return outward;
        }
        public void setOutward(String outward) {
            this.outward = outward;
        }
        public String getSelf() {
            return self;
        }
        public void setSelf(String self) {
            this.self = self;
        }
        @Override
        public String toString() {
            return "Type [id=" + id + ", name=" + name + ", inward=" + inward
                    + ", outward=" + outward + ", self=" + self + "]";
        }
    }
    

    Now you can test it as -

    Main.java

        import com.google.gson.Gson;
        import com.google.gson.GsonBuilder;
        import com.testgson.beans.Example;
    
        public class Main {
            private static Gson gson;
    
            static {
                gson = new GsonBuilder().create();
            }
    
            /**
             * @param args
             */
            public static void main(String[] args) {
                 String j = "{\"expand\":\"names,schema\",\"startAt\":0,\"maxResults\":50,\"total\":1,\"issues\":[{\"expand\":\"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields\",\"id\":\"18200\",\"self\":\"https://localhost/rest/api/2/issue/18200\",\"key\":\"LS-1111\",\"fields\":{\"issuetype\":{\"self\":\"https://localhost/rest/api/2/issuetype/3\",\"id\":\"3\",\"description\":\"A task that needs to be done.\",\"iconUrl\":\"https://localhost/secure/viewavatar?size=xsmall&avatarId=10318&avatarType=issuetype\",\"name\":\"Task\",\"subtask\":false,\"avatarId\":10318},\"timespent\":21600,\"aggregatetimespent\":25200,\"resolution\":null,\"customfield_11201\":null,\"project\":{\"self\":\"https://localhost/rest/api/2/project/10100\",\"id\":\"10100\",\"key\":\"PROJKEY\",\"name\":\"ProjectABCD\",\"avatarUrls\":{\"48x48\":\"https://localhost/secure/projectavatar?pid=10100&avatarId=10600\",\"24x24\":\"https://localhost/secure/projectavatar?size=small&pid=10100&avatarId=10600\",\"16x16\":\"https://localhost/secure/projectavatar?size=xsmall&pid=10100&avatarId=10600\",\"32x32\":\"https://localhost/secure/projectavatar?size=medium&pid=10100&avatarId=10600\"}},\"issuelinks\":[{\"id\":\"16202\",\"self\":\"https://localhost/rest/api/2/issueLink/16202\",\"type\":{\"id\":\"10003\",\"name\":\"Relates\",\"inward\":\"relates to\",\"outward\":\"relates to\",\"self\":\"https://localhost/rest/api/2/issueLinkType/10003\"}}]}}]}";
                 Example r = gson.fromJson(j, Example.class);
                 System.out.println(r);
    
    // This is how traversal can be done
            List issues = r.getIssues();
            for(Issue i: issues) {
                System.out.println("Expand - " + i.getExpand());
                System.out.println("Id - " + i.getId());
                System.out.println("Self - " + i.getSelf());
                System.out.println("Key - " + i.getKey());
                System.out.println("Fields - " + i.getFields());
            }
            }
        }
    

    Result is -

    Example [expand=names,schema, startAt=0, maxResults=50, total=1, issues=[Issue [expand=operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields, id=18200, self=https://localhost/rest/api/2/issue/18200, key=LS-1111, fields=Fields [issuetype=Issuetype [self=https://localhost/rest/api/2/issuetype/3, id=3, description=A task that needs to be done., iconUrl=https://localhost/secure/viewavatar?size=xsmall&avatarId=10318&avatarType=issuetype, name=Task, subtask=false, avatarId=10318], timespent=21600, aggregatetimespent=25200, resolution=null, customfield11201=null, project=Project [self=https://localhost/rest/api/2/project/10100, id=10100, key=PROJKEY, name=ProjectABCD, avatarUrls=AvatarUrls [_48x48=null, _24x24=null, _16x16=null, _32x32=null]], issuelinks=[Issuelink [id=16202, self=https://localhost/rest/api/2/issueLink/16202, type=Type [id=10003, name=Relates, inward=relates to, outward=relates to, self=https://localhost/rest/api/2/issueLinkType/10003]]]]]]]
    

    0 讨论(0)
提交回复
热议问题