Я пытаюсь получить конкретный элемент массива не по позиции массива, а по ключу содержимого.
Пример JSON:
{"items": [{
"key": "prop-name",
"label": "Provider",
"type": "DROPDOWN",
"items": ["bla", "blub", "what", "ever"]
}, {
"key": "prop-modes",
"label": "Transport modes",
"type": "CHECKBOX",
"items": ["AIR", "RAIL", "ROAD", "SEA"]
}
]}
private static String URL_GLOBAL_FILTER = "/global-filter";
private static String PROP_NAME = "prop-name";
mvc.perform(get(URL_GLOBAL_FILTER).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(jsonPath("$.items", hasSize(10)))
.andExpect(jsonPath("$.items[?((@.key === \"" + PROP_NAME + "\" && @.type === \"DROPDOWN\"))]").exists())
.andExpect(jsonPath("$.items[0].items", hasSize(4)));
Это прекрасно работает. Но то, что я хочу сделать, это что-то вроде:
.andExpect(jsonPath("$.items[?(@.key == \"prop-name\")].items", containsString("bla")))
Но это выдает следующую ошибку:
java.lang.AssertionError: JSON path "$.items[?(@.key == "prop-name")].items"
Ожидается: строка, содержащая «бла»
но: был net.minidev.json.JSONArray (<[["bla", "blub", "what", "ever"]]>)
Что означает < >
? Как получить доступ к массиву внутри?
В jsonQueryTool похоже, что я хочу.
(ОБНОВЛЕННЫЙ вопрос)