对后端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
}
]
}
]
}
答案 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的有效性)。