将java.util.ArrayList转换为gson.JsonElement

时间:2018-09-18 14:29:19

标签: java json arraylist gson rest-assured

对后端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对象。 但是一个命令无法将其转换为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
                }
            ]
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

该解决方案对我有用。

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

答案 1 :(得分:0)

您需要删除JSON末尾的最后一个逗号,因为它不是有效的JSON。完成此操作后,请重试,看看是否可行。 (使用JSONBlob验证JSON的有效性)。