当前位置: 首页 > 知识库问答 >
问题:

使用“放心”从返回的响应中提取多个 JsonPath 值

倪风史
2023-03-14

我需要从从 Rest Assured 建模请求返回的 JSON 响应数据中获取两个值:

js prettyprint-override">    public void getCustomerStatuses() {

        Response response =

        given().header("X-AC-User-ID","test-user").
                spec(customerApiSpec).
        when().
                get("/api/v6/status/" + ref + "/").
        then().
                assertThat().statusCode(200).extract().response();

        custStatusId = response.path("$.cust[?(@.name=='STATUS_ID')].id");
        custRenewalId = response.path("$.cust[?(@.name=='RENEWAL_ID')].id");

        System.out.println(custStatusId);
        System.out.println(custRenewalId);

    }

这抛出和 java.lang.IllegalArgumentException: Invalid JSON 表达式:Script1.groovy: 1: Unexpected input: '$.cust[?' @ line 1, column 36. $.cust[?(@.name=='STATUS_ID')].id

获取这些的正确、最好的方法是什么?我知道我可以链接提取().响应(). jsonPath();关闭请求,但不确定如何获取

共有1个答案

锺离穆冉
2023-03-14

是的,你可以使用JsonPath

    Response response =

    given().header("X-AC-User-ID","test-user").
            spec(customerApiSpec).
    when().
            get("/api/v6/status/" + ref + "/").
    then().
            assertThat().statusCode(200).extract().response();

    JsonPath jsonPath = response.jsonPath();

如果收到的 json 正文是这样的;

{
  "value1":{
    "id": 1,
    "abc": {
        "v1": "o1",
        "v2": "o2"
    }
  },
  "value2":{
    "id": 2,
    "title": "test2"
  }  
}

然后使用 get(字符串路径)方法;

    String v1 = jsonPath.get("value1.abc.v1"); // o1
    String title = jsonPath.get("value2.title"); //  test2

所需进口;

io.restassured.path.json.JsonPath;
 类似资料:
  • 我试图使用Rest assured和JsonPath从pzSetRuleSetFilter字段中提取一个值,其中pyRuleSetName等于某个值(在本例中为商标)。我一直得到下面的错误。任何关于如何解决这个问题并提取价值的想法都是很好的 无效的JSON表达式:script1.groovy:1:需要EOF,发现“[”@第1行,第39列。 我的查询system.out.println(respon

  • 我有一个列表作为响应返回。我需要从使用product.name和tariffplan.name的列表中获得一个项目。 我使用Java8。以下是我的方法。我拿到了卡。类元素的列表。然后,我需要从列表中获得具有指定“product.name”和“tariffplan.name”的单个项目。 是否可以用Restastured来做这件事?也许像我的例子一样使用。param方法?但是在我的示例中。param

  • 我有一个来自web服务的JSON响应,看起来像这样: 我需要做的是使用JSONPATH查询从所有实体中提取主题。 如何获得这些结果: 来自第一项的主题-某个SubjectOne 过滤来自所有实体的特定主题值(例如某个主题2) 从所有实体获取对象

  • 该函数包含API,我可以在其中获取JSON格式的值。但我想获取JSON中存在的确切ID=2如何使用JavaJSON路径获取该数据。我必须使用maven依赖项。该函数包含API,我可以在其中获取JSON格式的值。但我想获取JSON中存在的确切ID=2如何使用JavaJSON路径获取该数据。我必须使用maven依赖项。 这个响应帮助我从每个数据中找到键值。

  • 我最近开始测试一个新项目的API,放心吧。我的Java不是很流利,所以我需要知道如何优化代码。 假设我有一个API,它的输出是以下格式的JSON- 数组中大约有400个这样的对象。我想获取所有400条记录的,并存储在一个数组中。我可以这样做,但我认为该方法可以优化。 我目前的代码 : 如何最小化代码行以实现同样的事情?