RestAssured JsonPath: плоский массив элементов в иерархии

Я пишу тест дыма, используя успокоенный и хочу пройти API, чтобы убедиться, что не произошло никаких неожиданных ошибок.

У меня есть структура данных, которая выглядит следующим образом:

{
...
"sites": [
    {
        ...
        "groups": [
            {
                ...
                "locations": [
                    {
                        ...
                        "racks": [
                            {
                                "rackId": 123456789,
                                ...
                            },
                            {
                                "rackId": 987654321,
                                ...
                            },
                            ...
                        ]
                    }
                ]
            }
        ]
    },
    {
        ...
        "groups": [
            {
                ...
                "locations": [
                    {
                        ...
                        "racks": [
                            {
                                "rackId": 11111111,
                                ...
                            },
                            {
                                "rackId": 22222222,
                                ...
                            },
                            ...
                        ]
                    }
                ]
            }
        ]
    },
    ...
]
}

Используя JsonPath, связанный с RestAssured, я пытаюсь получить плоский список всех rackIds, чтобы затем вызывать последующие запросы для этих rackIds.

jsonPath.getList("sites.groups.locations.racks.rackId", Long.class);

>> java.lang.NumberFormatException: For input string: "[[[406071537, 406071538, 406071539, 406071540, 406071541]]]"

Я попытался использовать этот путь, но не сработал, потому что я считаю, что этот синтаксис работает только с другой реализацией JsonPath, а не с той, которая связана с уверенностью

"$.sites[*].groups[*].locations[*].racks[*].rackId"

Теперь я подошел к этому, который дает мне списки списков списков, которые я мог бы затем сгладить сам. Но у меня возникает проблема, что числа по умолчанию интерпретируются как целые числа, но я получаю длинные значения.

 List list = jsonPath.getList("sites.groups.locations.racks.rackId");

Есть идеи?

1 ответ

Решение

Просто используйте flatten():

List list = jsonPath.getList("sites.groups.locations.racks.rackId.flatten()");
Другие вопросы по тегам