0

我有这个 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")))了,但它不起作用。有任何想法吗?

4

2 回答 2

0

使用JsonPath您可以获得所有列和所有人类。

每个JSON Object都表示为HashMap<>。如果它仅包含字段,HashMap<String, String>但如果包含数组或嵌套的 JSON 对象,那么它是HashMap<String, Object>另一个ObjectJSON 对象或数组的位置。

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

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>供进一步处理

于 2019-05-30T18:10:17.270 回答
0

您可以使用 jsonPath 从人类那里获取所有“名称”:$.columns[*].human[*].name它将给出以下结果:

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

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

[
  "ANA",
  "ADI"
]
于 2019-06-06T09:17:48.427 回答