【问题标题】:Getting String value using JsonPath Java使用 JsonPath Java 获取字符串值
【发布时间】:2019-08-05 08:32:28
【问题描述】:

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

【问题讨论】:

    标签: java jsonpath rest-assured-jsonpath


    【解决方案1】:

    我认为问题在于响应是一个对象数组,而不仅仅是一个对象?所以你想检查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

    【讨论】:

      【解决方案2】:

      当你用“getList”读取时,你会得到准确的值。

          JsonPath values = new JsonPath(responseBody);
          List<String> valuesToRead = values.getList("StartDate");
          for (String value : valuesToRead) {
              System.out.println(value);
          }
      

      【讨论】:

        【解决方案3】:

        这可能会对您有所帮助。试试下面的代码:

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

        【讨论】:

          猜你喜欢
          • 2014-04-07
          • 2020-02-28
          • 1970-01-01
          • 2013-06-27
          • 1970-01-01
          • 1970-01-01
          • 2012-08-27
          • 1970-01-01
          • 2013-08-09
          相关资源
          最近更新 更多