使用JsonPath Java获取字符串值

时间:2019-03-14 12:33:24

标签: java jsonpath rest-assured-jsonpath

我使用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从响应字符串中提取的值中删除方括号吗?

3 个答案:

答案 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