如何在 json 响应中获取数组的大小?放心API,JAVA
How get size of an array in json response? rest assured API, JAVA
我在这个门户网站上找到了很多关于这个问题的主题,但无论如何我都无法实现我所需要的。我不断收到下一个例外:
java.lang.IllegalArgumentException: The parameter "roles" was used but not defined. Define parameters using the JsonPath.params(...) function
.
部分我的代码:
import static io.restassured.RestAssured.given;
import io.restassured.RestAssured;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
String baseURItest = RestAssured.baseURI = "http://testapi.test.com/testapps");
Response response;
response = given().when().get("/getAllRoles?token=token");
countRoles=response.body().path("$..roles.size()");
System.out.println(countRoles);
控制台输出:
> java.lang.IllegalArgumentException: The parameter "roles" was used but
> not defined. Define parameters using the JsonPath.params(...) function
和json body响应:
{
"Message": "",
"Status": 200,
"Data": {
"errors": [],
"roles": [
{
"ROLEKEY": "1",
"ROLEID": 1,
"ROLENAME": "name1",
"ROLEDESCRIPTION": "1"
},
{
"ROLEKEY": "2",
"ROLEID": 2,
"ROLENAME": "name2",
"ROLEDESCRIPTION": "12"
},
{
"ROLEKEY": "3",
"ROLEID": 3,
"ROLENAME": "name3",
"ROLEDESCRIPTION": "x"
}
]
}
}
我也试过了:
JsonPath jsonPathValidator = response.jsonPath();
System.out.println(jsonPathValidator.get("$..ROLEKEY").toString());
我会说我尝试了很多在 google 中找到的不同方法,但每次我都会遇到相同的错误。有人可以向我解释一下我在这里错过了什么吗?或者我该怎么办?预先感谢您的帮助!
问题:你误解了Rest-Assured中的JsonPath。
$..ROLEKEY
是 JsonPath jayway 语法。
Rest-Assured 中的 JsonPath 在内部使用 groovyGPath。
放心wiki.
Note that the "json path" syntax uses Groovy's GPath notation and is not to be confused with Jayway's JsonPath syntax.
解决方法:您可以选择以下两种方式之一:
- 通过将此添加到 pom.xml(或 gradle.build)来使用 JsonPath jayway
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.6.0</version>
</dependency>
Response res = given().when().get("/getAllRoles?token=token");
JsonPath.read(res.asString(), "$..ROLEKEY");
- 您可以使用 Rest-Assured 中的 JsonPath。
List<String> roles = response.jsonPath().getList("Data.roles.ROLEKEY");
System.out.println(roles);
//[1,2,3]
我在这个门户网站上找到了很多关于这个问题的主题,但无论如何我都无法实现我所需要的。我不断收到下一个例外:
java.lang.IllegalArgumentException: The parameter "roles" was used but not defined. Define parameters using the JsonPath.params(...) function
.
部分我的代码:
import static io.restassured.RestAssured.given;
import io.restassured.RestAssured;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
String baseURItest = RestAssured.baseURI = "http://testapi.test.com/testapps");
Response response;
response = given().when().get("/getAllRoles?token=token");
countRoles=response.body().path("$..roles.size()");
System.out.println(countRoles);
控制台输出:
> java.lang.IllegalArgumentException: The parameter "roles" was used but
> not defined. Define parameters using the JsonPath.params(...) function
和json body响应:
{
"Message": "",
"Status": 200,
"Data": {
"errors": [],
"roles": [
{
"ROLEKEY": "1",
"ROLEID": 1,
"ROLENAME": "name1",
"ROLEDESCRIPTION": "1"
},
{
"ROLEKEY": "2",
"ROLEID": 2,
"ROLENAME": "name2",
"ROLEDESCRIPTION": "12"
},
{
"ROLEKEY": "3",
"ROLEID": 3,
"ROLENAME": "name3",
"ROLEDESCRIPTION": "x"
}
]
}
}
我也试过了:
JsonPath jsonPathValidator = response.jsonPath(); System.out.println(jsonPathValidator.get("$..ROLEKEY").toString());
我会说我尝试了很多在 google 中找到的不同方法,但每次我都会遇到相同的错误。有人可以向我解释一下我在这里错过了什么吗?或者我该怎么办?预先感谢您的帮助!
问题:你误解了Rest-Assured中的JsonPath。
$..ROLEKEY
是 JsonPath jayway 语法。Rest-Assured 中的 JsonPath 在内部使用 groovyGPath。
放心wiki.
Note that the "json path" syntax uses Groovy's GPath notation and is not to be confused with Jayway's JsonPath syntax.
解决方法:您可以选择以下两种方式之一:
- 通过将此添加到 pom.xml(或 gradle.build)来使用 JsonPath jayway
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.6.0</version>
</dependency>
Response res = given().when().get("/getAllRoles?token=token");
JsonPath.read(res.asString(), "$..ROLEKEY");
- 您可以使用 Rest-Assured 中的 JsonPath。
List<String> roles = response.jsonPath().getList("Data.roles.ROLEKEY");
System.out.println(roles);
//[1,2,3]