2

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

{
    "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"
                        }
                    }
                ]
        }
     }
    ]
}

I am using GSON for traversing through the elements and getting the values. I have written POJO classes following the "Nested Objects" example at

http://www.javacreed.com/gson-deserialiser-example/

I am able to get the element values till 2nd level. Eg: I am able to get the value of response.expand, response.issues.get(0).expand and other values till this level. How can I get the value of response.issues.get(0).fields.issuetype.id?

How should I construct my deserializer and POJO class. Please assist. Thanks.

1 Answer 1

3

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<Issue> issues = new ArrayList<Issue>();
    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<Issue> getIssues() {
        return issues;
    }
    public void setIssues(List<Issue> 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<Issuelink> issuelinks = new ArrayList<Issuelink>();
    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<Issuelink> getIssuelinks() {
        return issuelinks;
    }
    public void setIssuelinks(List<Issuelink> 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<Issue> 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]]]]]]]
Sign up to request clarification or add additional context in comments.

3 Comments

thanks for the answer. Is there a specific way I can get part of the response. For eg: If I need to get "example.issues.key", how can I get that?
If you find this answer helpful then please accept the answer. Since, everything is in java object now, you can get the values.
Sure, I am accepting it as the answer. Could you please assist with a sample? How can I get the value of issues.key from Main class?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.