java - 访问具有相同命名父级的值

标签 java json jenkins gson

这里我有 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/

相关文章:

java - Eclipse 自定义热键 - 将当前行打印到标准输出

java - 迭代器应该返回 HashSet 但充当对象

java - "java.lang.OutOfMemoryError"生成诱惑报告时

javascript - 将键和值动态插入 json 数组结构

python - 如果测试失败,如何使 jenkins 触发构建失败

jenkins - 如何复制 Jenkins secret 文件

java - 将文件中的数字相加

java - ResultSet关闭后不允许操作,mysql

javascript - 使用唯一键/值过滤 JSON

javascript - 如何通过操作特定键从对象创建 HashMap