过滤嵌套 JSON 数组:放心

Filtering on nested JSON array: Rest Assured

我正在尝试根据嵌套 JSON 数组中的值过滤我的 GET 响应 (JSON)。例如:在下面的 JSON 中,我想过滤一个 JSON 数组并打印使用巧克力作为面糊的蛋糕的名称。

{
"id": "0001",
"type": "donut",
"name": "Choco Blueberry Cake",
"ppu": 0.55,
"batter":[
         { "id": "1001", "type": "Regular" },
         { "id": "1002", "type": "Chocolate" },
         { "id": "1003", "type": "Blueberry" }
 ]
}

我试过类似的东西:

List<String> chocolateCakeList =jsonPath.getList("findAll{it.batter.type=='chocolate'}.name");

List<String> chocolateCakeList =jsonPath.getList("findAll{it.batter.it.type=='chocolate'}.name");

两个 return 空列表。

问题

  1. 首先,如果要使用findAll那么提取的对象必须是数组。你的 json 是对象 {},不是数组 []。实际上,您的嵌套对象 batter 是一个数组 [].

  2. 要搜索的关键字是 Chocolate,而不是 chocolate。这里区分大小写。

解决方案

-如果您的整个回复与您发布的内容完全一致,那么提取的路径是

String name = jsonPath.getString("name")

-如果您的回复具有这样的结构。

[
  {
    "id": "0001",
    "type": "donut",
    "name": "Choco Blueberry Cake",
    "ppu": 0.55,
    "batter": [
      {
        "id": "1001",
        "type": "Regular"
      },
      {
        "id": "1002",
        "type": "Chocolate"
      },
      {
        "id": "1003",
        "type": "Blueberry"
      }
    ]
  },
  {
    "id": "0002",
    "type": "donut",
    "name": "Choco Blueberry Cake",
    "ppu": 0.55,
    "batter": [
      {
        "id": "1001",
        "type": "Regular"
      },
      {
        "id": "1002",
        "type": "Chocolate 2"
      },
      {
        "id": "1003",
        "type": "Blueberry"
      }
    ]
  }
]

那么提取就是

List<String> list = jsonPath.getList("findAll {it.batter.findAll {it.type == 'Chocolate'}}.name");