Использование JSONAssert для проверки наличия элемента в массиве JSON

У меня есть JSONObject, который похож на что-то вроде этого:

{
 "category":"abc"
 "staus":""open"
 "external":[
       {"name":"123", "type":"OTHER"},
       {"name":"678", "type":"ALPHA"},
       {"name":"890", "type":"DELTA"}
 ]
}

Если я хочу использовать JSONAssert, чтобы проверить, существует ли item {"name":"678"}, и я не знаю порядок элемента и количество элементов во "внешнем" массиве, как мне это сделать в Java?

Кажется, ArrayValueMatcher должен быть подходящим способом, но я просто не могу заставить его работать.

Пожалуйста помоги

2 ответа

Вы можете использовать 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")));
    }
Другие вопросы по тегам