Rest-Assured当JSON键以数字开头时获取jsonPath

时间:2014-04-23 17:16:00

标签: rest-assured

如何使用json路径获取name = status ...这里的问题是key = 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))

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,但它并不是很优雅:

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。然后我们反转列表,因为它似乎是最后一次运行时收集结果列表将首先具有最后一个值。然后我们从这个列表中得到第一个值(在你的例子中是data.2),最后得到名字。