如何使用json路径获取name=status。。。这里的问题是密钥=2是随机数,,是他们跳过这些随机和读取名称的任何方法
请放心,这是GET请求的样本响应
响应
{
"error": false,
"message": "",
"data": {
"2": {
"name": "No Status",
"protected": "1",
"id": "1",
"temporal_start": "0",
"temporal_end": "2147483647"
},
"3": {
"name": "Started",
"protected": "1",
"id": "2",
"temporal_start": "0",
"temporal_end": "2147483647"
},
}
}
我的请求代码是
given()
.param("error", "false")
.when()
.get(URI)
.then()
.body("data.2.name", startsWith(No))
我找到了一个解决方案,但它不是很优雅:
when().
get(URI).
then().
body("data.collect { it.value }.reverse()[0].name", equalTo("No Status")).
body("data.collect { it.value }.reverse()[1].name", equalTo("Status"));
使用根路径可以简化:
when().
get(URI).
then().
root("data.collect { it.value }.reverse()[%d].name").
body(withArgs("0"), equalTo("No Status")).
body(withArgs("1"), equalTo("Status"));
说明:由于数据是表示为HashMap的JsonObject,因此我们运行collect方法,只将Map的值作为List返回。然后我们反转列表,因为它看起来是最后一个。当运行collect时,结果列表将首先具有最后一个值。然后我们从这个列表中得到第一个值(在您的示例中为data.2),最后得到名称。