这里我有 Jenkins 生成的一些 JSON,我想使用 GSON 访问下面 JSON 中的值 Started by user XXX
。
尽管如您所见,actions
数组中有两个cause
。尽管有时只有一个(在这种情况下只需返回那个)。
问题:我如何才能仅访问第一个原因
,或者更好地将它们结合起来,以便我可以像Started by user XXX - Rebuilds build # 一样访问它2
遗憾的是,我无法更改 JSON。
编辑*我知道标题可能不是最好的,尽管我想不出另一种表达方式,所以如果有人能想到更好的标题,我将非常感激。
{
"jobs" : [
{
"name" : "Test Build",
"url" : "URL",
"lastBuild" : {
"actions" : [
{
"causes" : [
{
"shortDescription" : "Started by user XXX"
}
]
},
{
"causes" : [
{
"shortDescription" : "Rebuilds build #2"
}
]
},
{
"parameters" : [
{
"name" : "ENVIRONMENT",
"value" : "PROD"
},
{
"name" : "RELEASE"
}
]
}
],
"building" : false,
"duration" : 126580,
"estimatedDuration" : 74509,
"number" : 3,
"timestamp" : 1445261252000,
"url" : "URL",
"builtOn" : "D-slave"
}
},
最佳答案
尝试使用下面的表达式。 0 索引将为您提供第一个元素。
jobs[0].lastBuild.actions[0].causes
这会给你
[
[
{
"shortDescription":"Started by user XXX"
}
]
]
根据需要更改表达式。
以下所有类的 Java 代码 - 基于您的 json 格式。
所以你需要像 jenkinjobs.jobs(0).getActions(0) 这样的东西。
public class Jenkinjobs
{
private Jobs[] jobs;
public Jobs[] getJobs ()
{
return jobs;
}
public void setJobs (Jobs[] jobs)
{
this.jobs = jobs;
}
@Override
public String toString()
{
return "ClassPojo [jobs = "+jobs+"]";
}
}
public class Jobs
{
private LastBuild lastBuild;
private String name;
private String url;
public LastBuild getLastBuild ()
{
return lastBuild;
}
public void setLastBuild (LastBuild lastBuild)
{
this.lastBuild = lastBuild;
}
public String getName ()
{
return name;
}
public void setName (String name)
{
this.name = name;
}
public String getUrl ()
{
return url;
}
public void setUrl (String url)
{
this.url = url;
}
@Override
public String toString()
{
return "ClassPojo [lastBuild = "+lastBuild+", name = "+name+", url = "+url+"]";
}
}
public class LastBuild
{
private String timestamp;
private String estimatedDuration;
private String duration;
private String building;
private String number;
private String builtOn;
private String url;
private Actions[] actions;
public String getTimestamp ()
{
return timestamp;
}
public void setTimestamp (String timestamp)
{
this.timestamp = timestamp;
}
public String getEstimatedDuration ()
{
return estimatedDuration;
}
public void setEstimatedDuration (String estimatedDuration)
{
this.estimatedDuration = estimatedDuration;
}
public String getDuration ()
{
return duration;
}
public void setDuration (String duration)
{
this.duration = duration;
}
public String getBuilding ()
{
return building;
}
public void setBuilding (String building)
{
this.building = building;
}
public String getNumber ()
{
return number;
}
public void setNumber (String number)
{
this.number = number;
}
public String getBuiltOn ()
{
return builtOn;
}
public void setBuiltOn (String builtOn)
{
this.builtOn = builtOn;
}
public String getUrl ()
{
return url;
}
public void setUrl (String url)
{
this.url = url;
}
public Actions[] getActions ()
{
return actions;
}
public void setActions (Actions[] actions)
{
this.actions = actions;
}
@Override
public String toString()
{
return "ClassPojo [timestamp = "+timestamp+", estimatedDuration = "+estimatedDuration+", duration = "+duration+", building = "+building+", number = "+number+", builtOn = "+builtOn+", url = "+url+", actions = "+actions+"]";
}
}
public class Parameters
{
private String name;
private String value;
public String getName ()
{
return name;
}
public void setName (String name)
{
this.name = name;
}
public String getValue ()
{
return value;
}
public void setValue (String value)
{
this.value = value;
}
@Override
public String toString()
{
return "ClassPojo [name = "+name+", value = "+value+"]";
}
}
public class Actions
{
private Causes[] causes;
public Causes[] getCauses ()
{
return causes;
}
public void setCauses (Causes[] causes)
{
this.causes = causes;
}
@Override
public String toString()
{
return "ClassPojo [causes = "+causes+"]";
}
}
public class Causes
{
private String shortDescription;
public String getShortDescription ()
{
return shortDescription;
}
public void setShortDescription (String shortDescription)
{
this.shortDescription = shortDescription;
}
@Override
public String toString()
{
return "ClassPojo [shortDescription = "+shortDescription+"]";
}
}
关于java - 访问具有相同命名父级的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315450/