如何从嵌套列表中提取项目-保证放心

时间:2019-05-30 14:48:29

标签: java rest-assured

我有这个json对象

{
   "type" : "employee",
   "columns" :
      [
         {
            "id" : 1,
            "human" :
               [
                  {
                     "name" : "ANA",
                     "age" : "23"
                  },
                  {
                     "name" : "IULIA",
                     "age" : "22"
                  }
               ]
         },
         {
            "id" : 2,
            "human" :
               [
                  {
                     "name" : "ADI",
                     "age" : "21"
                  },
                  {
                     "name" : "GELU",
                     "age" : "18"
                  }
               ]
         }
      ]
}

,我需要从每个人员列表中提取名字。 我已经尝试过.body("columns.human.name[0]", everyItem(containsString("A"))),但是没有用。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

使用JsonPath,您可以获取所有专栏和所有人员。

JSON Object的每个表示为HashMap<>。如果仅包含字段,则为HashMap<String, String>,但如果包含数组或嵌套的JSON对象,则为HashMap<String, Object>,其中Object是另一个JSON对象或数组。

鉴于上述情况,您可以使用以下代码获取所有列以及每个列中的第一个人的姓名:

JsonPath path = response.jsonPath();
List<HashMap<String, Object>> columns = path.getList("columns");
for (HashMap<String, Object> singleColumn : columns) {
    List<HashMap<String, Object>> humans = (List<HashMap<String, Object>>) singleColumn.get("human");
    System.out.println(humans.get(0).get("name"));
}

以上代码将在控制台中打印ANAADI。 您可以将结果存储在List<String>中以进行进一步处理

答案 1 :(得分:0)

您可以使用jsonPath从人类获得所有“名称”:$.columns[*].human[*].name,它将得到以下结果:

[
  "ANA",
  "IULIA",
  "ADI",
  "GELU"
]

如果只需要第一个“名称”,则需要使用josn:$.columns[*].human[0].name,这将为您带来以下结果:

[
  "ANA",
  "ADI"
]