Преобразовать java.util.ArrayList в gson.JsonElement

Выполнение какого-либо запроса к внутреннему API для получения некоторого массива с объектами JSON, которые мне нужно использовать в тестовом прогоне. Использование RestAssured + Junit5 + Gradle + Allure.

 Response response = 
 given()
    .header("Content-Type", "application/json")
    .body(jsonPayload)
 .when()
    .post(STAGINGSCHEDULE+signature)
 .then()
     .assertThat()
     .statusCode(200)
     .body("message", is("Payload valid"),
     "payment_schedule", hasSize(greaterThan(0)))
     .extract().response();

Я бы получил это:

ArrayList<JsonElement> jsonElement = response.path("payment_schedule.payment_dates");

Эта команда покажет мне массив, заполненный необходимыми мне объектами json. Но cound не преобразовал это в gson.JsonObject.

System.out.println("jsonElement.get(1):   "+jsonElement.get(1));

Какие методы я использовал обычно, когда сам генерировал данные. Объект - gsonObject, а массив - gsonArray.

callbackJournalObject.add("schedule", scheduleArray);

Когда я пытаюсь использовать

callbackJournalObject.add("schedule", jsonElement.get(1));

я получил

java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.google.gson.JsonElement

Пример тела ответа JSON:

{
    "status": 0,
    "message": "Payload valid",
    "payment_schedule": [
        {
            "total": 16800.0,
            "term": 3,
            "payment_dates": [
                {
                    "date": "16.10.2018",
                    "amount": 5600.0
                },
                {
                    "date": "16.11.2018",
                    "amount": 5600.0
                },
                {
                    "date": "17.12.2018",
                    "amount": 5600.0
                }
            ]
        },
        {
            "total": 16650.0,
            "term": 6,
            "payment_dates": [
                {
                    "date": "16.10.2018",
                    "amount": 2800.0
                },
                {
                    "date": "16.11.2018",
                    "amount": 2800.0
                },
                {
                    "date": "17.12.2018",
                    "amount": 2800.0
                },
                {
                    "date": "16.01.2019",
                    "amount": 2800.0
                },
                {
                    "date": "18.02.2019",
                    "amount": 2800.0
                },
                {
                    "date": "18.03.2019",
                    "amount": 2650.0
                }
            ]
        }
    ]
}

вы можете показать ответ json?

Amit Jain 19.09.2018 09:04

добавлено тело ответа json

Boris 19.09.2018 11:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
1 413
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно удалить последнюю запятую в конце JSON, так как это недопустимый JSON. Как только вы это сделаете, попробуйте еще раз и посмотрите, работает ли это. (Используется JSONBlob для проверки действительности JSON).

Ответ принят как подходящий

Это решение сработало для меня.

ArrayList<JsonElement> jsonElement = response.path("payment_schedule.payment_dates");
String jsonElementGet1 = String.valueOf(jsonElement.get(1));
scheduleArray =  (JsonArray)jsonParser.parse(jsonElementGet1);

Другие вопросы по теме