2015-10-08 69 views
2

所有, 我有以下JSON輸出/串(其從JIRA API的響應)嵌套JSON字符串:反序列化使用GSON

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

我使用GSON用於通過元件遍歷和獲得的值。我已經寫了POJO班繼「嵌套對象」例如在

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

我能夠得到元素值至2級。例如: 我能夠得到值response.expand,response.issues.get(0).expand和其他值直到這個級別。 我怎樣才能得到response.issues.get(0).fields.issuetype.id的價值?

我應該如何構建我的解串器和POJO類。請協助。謝謝。

回答

2

試試這個 -

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 + "]"; 
    } 
} 

現在可以測試它 -

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

結果是 -

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

感謝您的回答。有沒有一種特定的方式可以得到部分答覆。例如:如果我需要獲得「example.issues.key」,我怎麼能得到它? –

+0

如果您發現此答案有幫助,請接受答案。因爲,現在一切都在java對象中,您可以獲取值。 – Saurabh

+0

當然,我接受它作爲答案。你能幫我做一個樣品嗎?我如何從Main類獲得iss​​ues.key的價值? –