Я использую 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"));
}
ОжидаемыйStartDate, который я передаю методу, — 2016-07-01, а дата, которую я возвращаю из объекта JsonPath, — [2016-07-01], что приводит к сбою утверждения.
Кто-нибудь знает, что я могу сделать с JsonPath, чтобы удалить квадратные скобки из значения, которое я извлекаю из строки ответа?




Это может помочь вам. Попробуйте следующий код:
public void checkStartDate(String expectedStartDate) {
String responseBody = response.getBody().asString();
String startDate = JsonPath.read(responseBody, "$.[0].StartDate");
Assert.assertEquals(expectedStartDate, startDate);
}
Когда вы читаете с помощью «getList», вы получите точное значение.
JsonPath values = new JsonPath(responseBody);
List<String> valuesToRead = values.getList("StartDate");
for (String value : valuesToRead) {
System.out.println(value);
}
Я думаю, проблема в том, что ответ представляет собой массив объектов, а не один объект? Итак, вы хотите проверить против 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