Как получить первый элемент из jsonpath, используя индекс в спокойной среде? - PullRequest
2 голосов
/ 12 марта 2019

Мой ответ 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.
}

Пожалуйста, помогите мне найти userId в первом вложенном json, используя индекс или любым другим способом.Заранее спасибо!

1 Ответ

2 голосов
/ 12 марта 2019

Я пытался, но не повезло в библиотеке RestAssured JsonPath.

В качестве альтернативы я использовал библиотеку org.json для анализа строки json в JSONObject и Iterator, чтобы получить индекс первого элемента.Ниже приведен фрагмент кода, протестированный с предоставленной вами строкой 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));

}
...