使用 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")));
    }