Как взять из ответа ld+json типа Validatable response c помощью rest assured на java элемент массива
Прошу помочь советом, как получить из ответа ld+json типа Validatable response, c помощью rest assured на java, элемент массива. Вот есть такой ответ от апи (обозначим его response):
{
"@context": {
"weekend": "WorkDay/weekend"
},
"@id": "/api/work-days",
"@type": "hydra:Collection",
"hydra:member": [
{
"@id": "/api/work-days/146b9be0-d2ac-11ec-bc02-be1e467dc836",
"@type": "WorkDay",
"is_weekend": true
},
"@id": "/api/work-days/146d4abc-d2ac-11ec-bc02-be1e467dc836",
"@type": "WorkDay",
"day": "2022-01-02T00:00:00+05:00",
"day_type": "weekend",
"is_weekend": true
},
...
Мне нужно получить значение элемента с селектором "hydra:member[0].@id" в тесте, написанном на rest assured на java. Я пыталась сделать с помощью функции get:
response.extract().jsonPath().get("hydra:member[0].@id");
В итоге падает ошибка с текстом
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: Unexpected input: ':' @ line 1, column 32. hydra:member[0].'@id' ^
Пробовала перед двоеточием обратный слеш добавить - результат тот же. Падает именно на двоеточии после слова hydra. Мне важно, чтобы ответ был именно в формате ld+json, без ld Отсутствует поле @id в ответе.
Ответы (1 шт):
как Вы уже заметили, символы ':' и '@' имеют специальное значение и не могут быть использованы в упрощенном стиле. см https://restfulapi.net/json-jsonpath/ и http://docs.groovy-lang.org/latest/html/documentation/#_gpath
попробуйте в квадратных скобках и кавычках:
response.extract().jsonPath().get("$['hydra:member'][0].'@id'");