简体   繁体   中英

How to extract item from nested list - Rest Assured

I've got this json object

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

and I need to extract the first name from each human list. I've tried .body("columns.human.name[0]", everyItem(containsString("A"))) but it doesn't work. Any ideas?

Using JsonPath you can get all columns and all humans.

Each of JSON Object is represented as HashMap<> . If it contains only fields it's HashMap<String, String> but if contains arrays or nested JSON Objects then it is HashMap<String, Object> where Object is either another JSON Object or array.

Given the above you can use following code to get all columns and name of first human in each column:

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

The above code will print ANA and ADI in the console. You can store the results in List<String> for further processing

you can get all "name" from humans with jsonPath : $.columns[*].human[*].name it will give below result :

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

And if you want only first "name" then you need to use josn : $.columns[*].human[0].name this will give you below result:

[
  "ANA",
  "ADI"
]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM