过滤嵌套 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 空列表。
问题
首先,如果要使用findAll
那么提取的对象必须是数组。你的 json 是对象 {},不是数组 []。实际上,您的嵌套对象 batter
是一个数组 [].
要搜索的关键字是 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");
我正在尝试根据嵌套 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 空列表。
问题
首先,如果要使用
findAll
那么提取的对象必须是数组。你的 json 是对象 {},不是数组 []。实际上,您的嵌套对象batter
是一个数组 [].要搜索的关键字是
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");