Как извлечь элемент из вложенного списка - будьте уверены - PullRequest
0 голосов
/ 30 мая 2019

У меня есть этот объект 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 голосов
/ 06 июня 2019

вы можете получить все "имя" от людей с помощью jsonPath: $.columns[*].human[*].name это даст следующий результат:

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

А если вам нужно только первое «имя», вам нужно использовать josn: $.columns[*].human[0].name, это даст вам следующий результат:

[
  "ANA",
  "ADI"
]
0 голосов
/ 30 мая 2019

Используя 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"));
}

Приведенный выше код напечатает ANA и ADI в консоли.Вы можете сохранить результаты в List<String> для дальнейшей обработки

...