【问题标题】:how to validate Json Response value in Rest Assured如何在 Rest Assured 中验证 Json 响应值
【发布时间】:2021-03-06 21:11:04
【问题描述】:
您好,我正在从 REST 请求中的 get 请求中获取 Json 响应正文。
{
"outputData": {
"data": {
"leaveList": [
{
"leaveTypeID": 1,
"leaveBalance": 2
},
{
"leaveTypeID": 2,
"leaveBalance": 9
}
]
}
}
}
我想得到leaveBalance 的leaveType 2。
leaveTypeID 的索引不断变化。
谢谢
【问题讨论】:
标签:
java
api
rest-assured
json-api-response-converter
【解决方案1】:
您可以通过迭代 leaveListJsonArray 来实现。
Response response = given()
.when()
.get("URL")
.then()
.extract()
.response();
int leaveTypeId = 2; // You can change this get the required leaveBalance
int leaveBalance = 0;
JSONObject responseObject = new org.json.JSONObject(response.body().asString());
JSONObject object1 = responseObject.getJSONObject("outputData");
JSONObject dataObject = object1.getJSONObject("data");
JSONArray jsonArray = dataObject.getJSONArray("leaveList");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.get("leaveTypeID").equals(leaveTypeId)) {
leaveBalance = Integer.parseInt(jsonObject.get("leaveBalance").toString());
}
}
System.out.println("leaveBalance = " + leaveBalance);
这将打印出来;
leaveBalance = 9
您可以将值动态分配给leaveTypeId 并获得您想要的leaveBalance。
【解决方案2】:
您可以使用jackson-databind 库将 json 字符串转换为对象。我使用 maven 包管理器添加到我的项目中。
我建议使用以下解决方案来为您的项目提供良好的结构。在我的解决方案中,我使用类来保留 json 值。您可以使用Json To Pojo 从 json 字符串生成对象。
输出:9
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class RestAssuredDemo {
public static void main(String[] args) {
String json = """
{
"outputData": {
"data": {
"leaveList": [
{
"leaveTypeID": 1,
"leaveBalance": 2
},
{
"leaveTypeID": 2,
"leaveBalance": 9
}
]
}
}
}
""";
ObjectMapper om = new ObjectMapper();
Root root = null;
try {
root = om.readValue(json, new TypeReference<Root>() {});
for (LeaveList leave: root.outputData.data.leaveList) {
if(leave.leaveTypeID == 2) {
System.out.println(leave.leaveBalance);
}
}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
public static class LeaveList{
public int leaveTypeID;
public int leaveBalance;
}
public static class Data{
public List<LeaveList> leaveList;
}
public static class OutputData{
public Data data;
}
public static class Root{
public OutputData outputData;
}
}
【解决方案3】:
GroovyPath = "outputData.data.leaveList.find{it.leaveTypeID==2}.leaveBalance"
String leaveBalance = response.extract().jsonPath().getString("outputData.data.leaveList.find{it.leaveTypeID==2}.leaveBalance");
它将为您提供 leaveTypeID 为 2 的休假余额,该对象的索引可以在任何可行的地方。