使用 JSONAssert 检查 JSON 数组中是否存在某个项目
Using JSONAssert to check if an item exists in a JSON array
我有一个类似于这样的 JSONObject:
{
"category":"abc"
"staus":""open"
"external":[
{"name":"123", "type":"OTHER"},
{"name":"678", "type":"ALPHA"},
{"name":"890", "type":"DELTA"}
]
}
如果我想使用 JSONAssert 检查项目 {"name":"678"} 是否存在,但我不知道项目的顺序和 "external" 数组中项目的数量,我该怎么办Java?
似乎 ArrayValueMatcher 应该是可行的方法,但我就是无法让它工作。
请帮忙
您可以将 JsonPath 用于此用例:
JSONArray array = JsonPath.read(json, "$.external[?(@.name == '678')]");
Assertions.assertThat(array).hasSize(1);
这是一个使用 JsonAssert 的完整示例:
@Test
public void foo() throws Exception {
String jsonString = "{\n" +
" \"category\":\"abc\",\n" +
" \"staus\":\"open\",\n" +
" \"external\":[\n" +
" {\"name\":\"123\", \"type\":\"OTHER\"},\n" +
" {\"name\":\"678\", \"type\":\"ALPHA\"},\n" +
" {\"name\":\"890\", \"type\":\"DELTA\"}\n" +
" ]\n" +
"}";
JsonAssert.with(jsonString).assertThat("$.external[*].name", hasItem(equalTo("678")));
}
我有一个类似于这样的 JSONObject:
{
"category":"abc"
"staus":""open"
"external":[
{"name":"123", "type":"OTHER"},
{"name":"678", "type":"ALPHA"},
{"name":"890", "type":"DELTA"}
]
}
如果我想使用 JSONAssert 检查项目 {"name":"678"} 是否存在,但我不知道项目的顺序和 "external" 数组中项目的数量,我该怎么办Java?
似乎 ArrayValueMatcher 应该是可行的方法,但我就是无法让它工作。
请帮忙
您可以将 JsonPath 用于此用例:
JSONArray array = JsonPath.read(json, "$.external[?(@.name == '678')]");
Assertions.assertThat(array).hasSize(1);
这是一个使用 JsonAssert 的完整示例:
@Test
public void foo() throws Exception {
String jsonString = "{\n" +
" \"category\":\"abc\",\n" +
" \"staus\":\"open\",\n" +
" \"external\":[\n" +
" {\"name\":\"123\", \"type\":\"OTHER\"},\n" +
" {\"name\":\"678\", \"type\":\"ALPHA\"},\n" +
" {\"name\":\"890\", \"type\":\"DELTA\"}\n" +
" ]\n" +
"}";
JsonAssert.with(jsonString).assertThat("$.external[*].name", hasItem(equalTo("678")));
}