Junit 使用键断言JSonPath中的数组对象
我试图通过内容键而不是数组位置来获取特定的数组项 JSON示例:Junit 使用键断言JSonPath中的数组对象,junit,jsonpath,mockmvc,Junit,Jsonpath,Mockmvc,我试图通过内容键而不是数组位置来获取特定的数组项 JSON示例: {"items": [{ "key": "prop-name", "label": "Provider", "type": "DROPDOWN", "items": ["bla", "blub", "what", "ever"] }, { "key": "prop-modes", "label": "Transport mode
{"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"]
}
]}
私有静态字符串URL\u GLOBAL\u FILTER=“/GLOBAL FILTER”;
私有静态字符串PROP_NAME=“PROP NAME”;
perform(get(URL\u GLOBAL\u FILTER).contentType(MediaType.APPLICATION\u JSON)).andExpect(status().isOk())
.andExpect(jsonPath($.items),hasSize(10)))
.andExpect(jsonPath($.items[?(@.key==\''+PROP\u NAME+“\''&&&&&.type===\'DROPDOWN\”)))存在())
.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"
应为:包含“bla”的字符串
但是:是net.minidev.json.JSONArray()
是什么意思?如何访问内部阵列
这似乎是我想要的
(更新问题)您是否尝试过使用Hamcrest的
hasItem
匹配器
import static org.hamcrest.Matchers.*;
.andExpect(jsonPath("$.items[?(@.key == 'prop-name')].items[*]", hasItem("bla")));
*
是一个通配符,items[*]
表示选择items数组的所有元素