【问题标题】:Invalid JSON Expression无效的 JSON 表达式
【发布时间】:2020-07-06 13:14:54
【问题描述】:

我正在使用非静态导入

JsonPath jp = response.jsonPath();
System.out.println(jp.get("data?(@.id>14).employee_name").toString());

对于如下所示的 JSON:

{"status":"success","data":[{"id":"1","employee_name":"Tiger Nixon","employee_salary":"320800","employee_age":"61","profile_image":""},{"id":"2","employee_name":"Garrett Winters","employee_salary":"170750","employee_age":"63","profile_image":""}]}

当我尝试运行它时,出现以下错误:

    java.lang.IllegalArgumentException: Invalid JSON expression:
    Script1.groovy: 1: expecting EOF, found '[' @ line 1, column 31.
                                data[?(@.id>14)].employee_name
                                 ^

1 error

谁能指导我为什么会抛出这个错误?

【问题讨论】:

  • Rest Assured 使用 GPath,这不是您可能知道的 JSONPath

标签: json api rest rest-assured rest-assured-jsonpath


【解决方案1】:

我怀疑该语法是否正确,但是,您应该使用以下语法

还要注意,id 是响应中的字符串,因此您必须将其包含在引号中

js.get("data.find {it.id > '14'}.employee_name").toString();

【讨论】:

  • 使用此语法,我收到以下错误:java.lang.IllegalArgumentException:使用了参数“it”但未定义。使用 JsonPath.params(...) 函数定义参数
  • 你确定吗?因为这是您发布的同一个 json 的一个工作示例,您可以发布您的完整代码吗?
  • 这里是:响应 resp = RestAssured.get("dummy.restapiexample.com/api/v1/employees"); System.out.println(resp.getStatusCode()); Assert.assertEquals(resp.getStatusCode(), 200) ; JsonPath jp = resp.jsonPath(); System.out.println(jp.get("data.employee_name").toString()); System.out.println(jp.get("data.id").toString ()); System.out.println(jp.get("data.find(it.id > '14').employee_name").toString());
  • 你的代码有错误,应该是{it.id > '14'}而不是(it.id > '14')
猜你喜欢
  • 2015-12-22
  • 2012-05-11
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多