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

如何在rest-assured框架中使用索引从jsonpath获取第一个元素?

孙帅
2023-03-14

我的api回应:

{
    "123": {
        "userId": 424,
        "firstName": "abc",
        "lastName": "xyz",
        "username": "abc",
        "email": "abc@gmail.com",
        "status": 1
    },
    "234": {
        "userId": 937,
        "firstName": "xyz",
        "lastName": "abc",
        "username": "xyz",
        "email": "xyz@mailinator.com",
        "status": 0
    },
    and so on ..
}

我的代码是这样的:

import groovy.inspect.swingui.GeneratedBytecodeAwareGroovyClassLoader;
import io.restassured.RestAssured;
import io.restassured.http.Method;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;

@Test
public void getUserIdTest() throws IOException, ParseException, SQLException {

String baseUrl = readPropertiesFile().getProperty("baseUrl");
        RestAssured.baseURI = baseUrl;
        RequestSpecification httpRequest = RestAssured.given();
        Response response = httpRequest.request(Method.GET, "myApiPath");
        JsonPath jsonPathEvaluator = response.getBody().jsonPath();

// Now after this, I want to get the value of the userId in the first nested json. I can't use the string "123" e.g. jsonPathEvaluator.get("123.userId") since it is dynamic in nature.
}

请帮助我找到第一个嵌套json中的userId使用index或任何其他方式。提前感谢!

共有1个答案

空枫涟
2023-03-14

我尝试过,但在重新启动的JsonPath库中没有成功。

或者我使用了组织。json库将json字符串解析为JSONObject,并使用迭代器获取第一个元素的索引。下面的代码片段使用您提供的json字符串进行测试。

import groovy.inspect.swingui.GeneratedBytecodeAwareGroovyClassLoader;
import io.restassured.RestAssured;
import io.restassured.http.Method;
import io.restassured.path.json.JsonPath;
import org.json.JSONObject;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import org.testng.annotations.Test;

import junit.framework.Assert;

@Test
public void getUserIdTest() throws IOException, ParseException, SQLException {

        String baseUrl = readPropertiesFile().getProperty("baseUrl");
        RestAssured.baseURI = baseUrl;
        RequestSpecification httpRequest = RestAssured.given();
        Response response = httpRequest.request(Method.GET, "myApiPath");
        String jsonResponseString = response.getBody().asString();
        //String jsonResponseString = "{\n    \"123\": {\n        \"userId\": 424,\n        \"firstName\": \"abc\",\n        \"lastName\": \"xyz\",\n        \"username\": \"abc\",\n        \"email\": \"abc@gmail.com\",\n        \"status\": 1\n    },\n    \"234\": {\n        \"userId\": 937,\n        \"firstName\": \"xyz\",\n        \"lastName\": \"abc\",\n        \"username\": \"xyz\",\n        \"email\": \"xyz@mailinator.com\",\n        \"status\": 0\n    }\n}";
        JSONObject jsonObject = new JSONObject(jsonResponseString);
        Iterator<String> keys = jsonObject.keys();

        String firstkey =keys.next(); 

        JSONObject jsonObjectElement = new JSONObject( jsonObject.get(firstkey).toString());
        String userId = jsonObjectElement.get("userId").toString();
        Assert.assertEquals(424, Integer.parseInt(userId));

}
 类似资料:
  • 我正在尝试使用Rest Asure获取的第一个值,用于。 当我使用 我得到: 学生ID 123有10多个课程列表。也可以使用正则表达式从JSON响应中获取特定元素,或者当我有几千行JSON响应时,如何获取元素的路径。 样本响应-

  • 下面是REST请求的响应,我的要求是验证name节点是否包含“军事”和amount节点是否等于500 我正在我的项目中使用REST-Assured IO API。你能帮我把这个要求编码一下吗?

  • 我有一个API,它会给出这样的JSON响应 我想从这个响应中找到所有唯一的属性。我尝试了以下方法,但没有一种有效- 方法-1 方法-2 接近-3 方法-4 方法-5 编辑-1:修复JSON。

  • 因此,我正在研究以下json: 我想检索联系人的类型为,并且只检索第一个返回的联系人。 将jsonpath与此路径一起使用时,“$…contacts[?(@.contactType=='S')].name”始终返回字符串数组,因为筛选操作始终将结果作为数组返回。 所以我尝试了“$联系人[?(@.contactType='S')].name[0]”和“$联系人[?(@.contactType='S'

  • 问题内容: 返回以下内容的最紧凑的方法是什么: 给定一个元组列表,返回一个由元组的第一个(或第二个,无关紧要)元素组成的列表。 对于: 返回的列表将是 问题答案: 如果需要同时使用zip

  • 以下数据正在mongodb中存储:- 现在,如果我想从mongo获取此数据,从建立与db的连接开始,到获取数据 我使用放心使用Spring启动自动化API测试,所以有相当多的mongo相关库可以利用。 那么如何开始呢?