Rest Assured当JSON密钥以数字开头时获取jsonPath



如何使用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),最后得到名称。

最新更新