Получение значения String с использованием JsonPath Java - PullRequest
0 голосов
/ 14 марта 2019

Я использую JsonPath для подтверждения некоторых значений, возвращаемых из ответа API, но у меня возникла небольшая проблема с подтверждением ответа.

Вот ответ, который я получаю:

[{ "Идентификатор": 75969, StartDate ":" 2016-07-01" , "EndDate": "2021-04-30", "длительность": 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, чтобы убрать квадратные скобки со значения, которое я извлекаю из строки ответа?

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Когда вы читаете с помощью «getList», вы получите точное значение.

    JsonPath values = new JsonPath(responseBody);
    List<String> valuesToRead = values.getList("StartDate");
    for (String value : valuesToRead) {
        System.out.println(value);
    }
0 голосов
/ 14 марта 2019

Мне кажется, проблема в том, что ответ представляет собой массив объектов, а не просто один объект? Итак, вы хотите проверить против 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

0 голосов
/ 14 марта 2019

Это может помочь вам.Попробуйте следующий код:

  public void checkStartDate(String expectedStartDate) {
    String responseBody = response.getBody().asString();
    String startDate = JsonPath.read(responseBody, "$.[0].StartDate");
    Assert.assertEquals(expectedStartDate, startDate);
  }
...