RestAssured Parsing Json Array Response с использованием цикла foreach - PullRequest
0 голосов
/ 06 июля 2019

У меня есть ответ от RestAssured, который представляет собой JsonArray, похожий на приведенный ниже код

[{ "id": "1", "applicationId": "ABC" }, { "id": "2", "applicationId": "CDE" }, { "id": "3", "applicationId": "XYZ" }]

Я использую код для получения идентификатора из первого элемента Json

    List<String> jresponse = response.jsonPath().getList("$");
    for (int i = 0; i < jsonResponse.size(); i++) {
    String id  = response.jsonPath().getString("id[" + i + "]");
    if(id.equals("1"){
        do something
    }
    else {
        something else
    }

    }

Есть ли способ использовать foreach вместо for в приведенном выше коде?

1 Ответ

1 голос
/ 08 июля 2019

Вместо получения корневого уровня, подобного следующему:

List<String> jresponse = response.jsonPath().getList("$");

Вы можете получить идентификаторы напрямую:

List<String> ids = path.getList("id");

Затем вы можете использовать цикл foreach вместо использования индексов, подобных этому:

        List<String> ids = path.getList("id");
        for (String id : ids) {
            if (id.equals("1")) {
                //do something
            } else {
                //do something else
            }
        }

РЕДАКТИРОВАТЬ:

Лучший способ (вероятно) заключается в создании объектов, представляющих JSON.Чтобы сделать это, мы должны понять, что содержит JSON.Пока у вас есть JSON Array, который содержит объекты JSON.Каждый из объектов JSON содержит id и applicationId.Чтобы разобрать этот JSON в класс Java, мы должны создать класс.Давайте назовем это Identity.Вы можете называть это как хотите.

public class Identity {
    public String id;
    public String applicationId;
}

Выше представлено представление объекта JSON.Имена полей являются точными именами в JSON.Идентификаторы должны быть открытыми.

Теперь, чтобы разобрать JSON в классы Java, мы можем использовать JsonPath следующим образом:

Identity[] identities = path.getObject("$", Identity[].class);

Затем мы перебираем массив, чтобы получить то, что нам нужно:

        for (Identity identity : identities) {
            if (identity.id.equals("1")) {
                System.out.println(identity.applicationId);
            }
        }

Исходя из этого, вы можете создать полный метод вместо простой печати applicationId следующим образом:

    private static String getApplicationId(String id, Identity[] identities) {
        for (Identity identity : identities) {
            if (identity.id.equals(id)) {
                return identity.applicationId;
            }
        }
        throw new NoSuchElementException("Cannot find applicationId for id: " + id);
    }

ДРУГОЕ РЕДАКТИРОВАНИЕ:

Чтобы использовать foreach и получить applicationID на основе id, вам нужно использовать метод getList, но другим способом.

List<HashMap<String, String>> responseMap = response.jsonPath().getList("$");

В приведенном выше коде мы получаемсписок объектов JSON в массиве JSON.

Каждый из элементов в HashMap представляет собой один объект JSON.Строки - это такие атрибуты, как id и applicationId, а секунда String - значения каждого атрибута.

Теперь мы можем использовать цикл foreach, чтобы получить желаемые результаты:

private static String getApplicationIdBasedOnId(Response response, String id) {
    List<HashMap<String, String>> responseMap = response.jsonPath().getList("$");
    for (HashMap<String, String> singleObject : responseMap) {
        if (singleObject.get("id").equals(id)) {
             return singleObject.get("applicationId");
        }
    }
    throw new NoSuchElementException("Cannot find applicationId for id: " + id);
}
...