我使用JsonPath对api响应返回的某些值进行断言,但是断言响应存在一个小问题。
这是我得到的答复:
[{“ Id”:75969,StartDate“:” 2016-07-01“,” EndDate“:” 2021-04-30“,” duration“:5640}]
让我说我要在开始日期宣布。 我创建的方法如下:
public void checkStartDate(String expectedStartDate) {
String responseBody = response.getBody().asString();
JsonPath values = new JsonPath(responseBody);
Assert.assertEquals(expectedStartDate,values.getString("startDate"));
}
我传递给该方法的ExpectedStartDate是2016-07-01,而我从JsonPath对象返回的日期是[2016-07-01],这会导致断言失败。
有人知道我可以使用JsonPath做什么,以便从im从响应字符串中提取的值中删除方括号吗?
答案 0 :(得分:0)
这可能会对您有所帮助。尝试以下代码:
public void checkStartDate(String expectedStartDate) {
String responseBody = response.getBody().asString();
String startDate = JsonPath.read(responseBody, "$.[0].StartDate");
Assert.assertEquals(expectedStartDate, startDate);
}
答案 1 :(得分:0)
当您使用“ getList”进行读取时,将获得确切的值。
JsonPath values = new JsonPath(responseBody);
List<String> valuesToRead = values.getList("StartDate");
for (String value : valuesToRead) {
System.out.println(value);
}
答案 2 :(得分:0)
我认为问题在于响应是对象数组,而不是单个对象?因此,您要检查jp.getString("[0].StartDate")
工作示例:
JsonPath jp = JsonPath.from("[{\"Id\":75969,\"StartDate\":\"2016-07-01\",\"EndDate\":\"2021-04-30\",\"duration\":5640}]");
System.out.println("2016-07-01".equals(jp.getString("[0].StartDate")));
打印:true