Rest-Assured Получить jsonPath, когда ключ JSON начинается с числа

Как мне получить имя = статус с помощью пути json ... проблема здесь в том, что ключ = 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))

person Rakesh_Kesireddy    schedule 23.04.2014    source источник


Ответы (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"));

Объяснение: поскольку данные представляют собой JsonObject, представленный как HashMap, мы запускаем collect, чтобы возвращать только значения карты в виде списка. Затем мы переворачиваем список, так как кажется, что при запуске сбора последний будет иметь последнее значение первым. Затем мы получаем первое значение из этого списка (data.2 в вашем примере) и, наконец, получаем имя.

person Johan    schedule 15.07.2014