如何使用我的代码以字符串形式返回 JSON 响应?
目的:我想在getAccessToken()它从 json 响应正文获取 accessToken 后调用,并且需要将其作为 a 返回String以在其他方法中使用。
我试图获得的响应示例:
"accessToken" : "The ID I need from here"
Run Code Online (Sandbox Code Playgroud)
代码 :
private String apiAccessToken;
public JsonPath getAccessToken() {
JsonPath jsonPath = given().header("X-API-KEY", Config.API_KEY).header("session", this.sessionID)
.header("username", this.userNameId).queryParam("code", verifiedCode).log().all()
.get(baseUri + basePath + "/vm1/verifyCode").then().log().all().extract().jsonPath();
this.apiAccessToken = jsonPath.get("accessToken");
return new JsonPath(apiAccessToken);
}
Run Code Online (Sandbox Code Playgroud)
[已添加 - 显示我如何使用下面评论中的解决方案]
我如何调用此方法的示例
public static String getToken(String key) {
String res = given()
.header("X-API-KEY", Config.API_KEY)
.header("session", this.SessionId)
.header("username", this.UserName)
.queryParam("code", verifiedCode)
.log().all()
.get(baseUri …Run Code Online (Sandbox Code Playgroud) 该函数包含 API,我可以在其中获取 JSON 格式的值。但我想获得 JSON 中存在的确切 ID=2 如何使用 Java JSON 路径获取该数据。我必须使用 Maven 依赖项。该函数包含 API,我可以在其中获取 JSON 格式的值。但我想获得 JSON 中存在的确切 ID=2 如何使用 Java JSON 路径获取该数据。我必须使用 Maven 依赖项。
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
void get_extract_response_body() {
//Specify Base URL
RestAssured.baseURI="https://reqres.in/api";
//Request object
RequestSpecification httpRequest=RestAssured.given();
//Response Object
Response response=httpRequest.request(Method.GET,"/unknown");
String responseBody= response.getBody().asString();
System.out.println(responseBody);
//Print Response in console window
JsonPath jsonpath= response.jsonPath();
System.out.println(jsonpath.get("data[0]."));
/*
* String id=jsonpath.get("$.data[1].id"); System.out.println(id);
*/
}
Run Code Online (Sandbox Code Playgroud)
{
"page": 1,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
{
"id": 1,
"name": …Run Code Online (Sandbox Code Playgroud) 这是我的JSON:
[
{
"id": 9741962,
"name": "getName",
"isActive": true
},
{
"id": 1,
"name": "New",
"isActive": true
}
]
Run Code Online (Sandbox Code Playgroud)
我想得到所有具有名称的对象:使用jsonPath的getName如何使用JsonPath(放心使用的onw)
我试试这个
JsonPath.with(jsonResponse).get("findAll { a -> a.name == getName }");
Run Code Online (Sandbox Code Playgroud)
但我得到错误.
java.lang.IllegalArgumentException: No such property: sdfsdf for class: Script1
Run Code Online (Sandbox Code Playgroud)
谢谢.
我需要验证像下面这样的响应是否包含一些字段。我对字段值不感兴趣 - 只是对键存在感兴趣。例如,我想检查这种类型的响应中是否存在键“id”。我将如何实现这一目标?
[
{
"id":"1",
"title":"Title",
"details":"details",
"benefit":"Welcome",
"expirationTimestamp":1549995900,
"notice":"some text",
}
]
Run Code Online (Sandbox Code Playgroud)
如果我做
given()
.spec(reqSpec).
when()
.get().
then()
.body("$", hasKey("id"));
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误:
java.lang.AssertionError: 1 expectation failed.
JSON path $ doesn't match.
Expected: map containing ["id"->ANYTHING]
Actual: [{blabla=something, id=1, details=details, etc=etc}]
Run Code Online (Sandbox Code Playgroud)
请问,有人可以向我解释一下这应该如何工作吗?
json jsonpath rest-assured web-api-testing rest-assured-jsonpath
我正在使用可放心的方式编写冒烟测试,并且想要遍历api以确保不会发生意外错误。
我有一个看起来像这样的数据结构:
{
...
"sites": [
{
...
"groups": [
{
...
"locations": [
{
...
"racks": [
{
"rackId": 123456789,
...
},
{
"rackId": 987654321,
...
},
...
]
}
]
}
]
},
{
...
"groups": [
{
...
"locations": [
{
...
"racks": [
{
"rackId": 11111111,
...
},
{
"rackId": 22222222,
...
},
...
]
}
]
}
]
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
使用RestAssured中捆绑的JsonPath,我试图获取所有rackId的固定列表,然后为这些rackId调用后续请求。
jsonPath.getList("sites.groups.locations.racks.rackId", Long.class);
>> java.lang.NumberFormatException: For input string: "[[[406071537, 406071538, 406071539, 406071540, 406071541]]]" …Run Code Online (Sandbox Code Playgroud) 我需要从 json 文件中获取数据,该文件具有奇怪的结构,但我找不到解决方案。我将restAssured与jsonPath一起使用,当我尝试获取特定周的数据时,如下所示
getJsonPath().getList("years.2017.weeks.find{it.isoWeekNum == '1'}")
Run Code Online (Sandbox Code Playgroud)
我收到错误
Invalid JSON expression: Script1.groovy: 1: unexpected token: 2017 @ line 1, column 33.
years.2017.weeks.find{it.isoWeekNum == '1'}
Run Code Online (Sandbox Code Playgroud)
同时我可以用这个表达式获取数据
getJsonPath().getList("years.2017.weeks")
这会向我返回所有星期的列表。
我发现获得我需要的东西的唯一方法就是这样
getJsonPath().getList("years[1]['2017'].weeks.find{it.isoWeekNum == '1'}")
但这不是我要找的。我需要找到一个解决方案,可以在没有 2017 年 [1] 年和 2016 年 [0] 年的情况下获取数据
"{
"years": [
{
"2016": {
"currentIsoWeek": "49",
"currentTourWeek": "49",
"weeks": [
{
"isoWeekNum": "1",
"tourWeekNum": "1",
"categories": []
},
{
"isoWeekNum": "2",
"tourWeekNum": "2",
"categories": []
}
]
}
},
{
"2017": {
"currentIsoWeek": "",
"currentTourWeek": "",
"weeks": [
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用放心为我的微服务编写集成测试。我有一个像这样的 Json 有效负载,它是从它返回的。
{
"sessionQuestions":[
{
"id":1272,
"sessionId":1146,
"questionId":"1002",
},
{
"id":1273,
"sessionId":1146,
"questionId":"1004",
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要根据 QuestionId 值查找会话问题的 id。然后我需要在我的断言中比较它们。给定 QuestionId 值,我很难从 sessionQuestion 中获取 id。我正在使用 JsonPath 来完成这件事。这是我的 Json 路径表达式。
new JsonPath(response).get("$.sessionQuestions[?(@.questionId=='1002')].id");
Run Code Online (Sandbox Code Playgroud)
这会引发错误。
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: expecting EOF, found '[' @ line 1, column 45.
nRootObject.$.sessionQuestions[?(@.quest
^
1 error
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Run Code Online (Sandbox Code Playgroud)
我在此在线评估器中尝试了相同的 Json 路径表达式,效果很好。我在用json-path-2.9.0.jar
我在这里做错了什么?非常感谢任何帮助。
我正在使用放心进行 API 发布调用并在正文中获得响应。然后我需要接受这个响应并选择特定的字段值并将它们存储为字符串,以便稍后与其他字符串对象进行比较。我编写了 jsonpath 来获取顶级字段值(如 id、status、type、country 等),但是当我必须进入返回的 json 数组中的对象之一时,我无法正确获取格式get() 方法。
以下是返回的 Json 示例:
{
"id": "ABC123",
"status": "NEW",
"type": "PERSONAL",
"country": "United States",
"totalBalances": {},
"availableBalances": {},
"fields": [
{
"fieldType": "mobilephone",
"value": "14216904425",
"fieldId": "personalMobileNumber"
},
{
"fieldType": "email",
"value": "user12345@work.com",
"fieldId": "personalEmail"
},
{
"fieldType": "STRING",
"value": "John Doe",
"fieldId": "individualName"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是我试图格式化以适应 get() 方法的 json 路径,但每次我都会收到一个非法参数异常 (java.lang.IllegalArgumentException: Invalid JSON expression) 我试图让它工作。基本上我需要在数组中识别正确的对象并获取正确的字段值。在这种情况下,这是 fieldId 字段,我想要字段“值”值(John Doe),以便我可以将其保存到 String 对象:
JsonPath pathToAccountName = response.jsonPath();
String accountName = pathToAccountName.get("fields[?(@.fieldId=='individualName')].value")
Run Code Online (Sandbox Code Playgroud)
我使用 …
我有一个 json 响应,如下所示:
"someArray": [
{
"someProperty":"someValue",
// other properties that are not relevant for me
},
{
"someProperty":"someOtherValue",
// other properties that are not relevant for me
}
]
Run Code Online (Sandbox Code Playgroud)
我想检查 someArray 数组是否有一个名为“someProperty”的属性且值为“someValue”的对象,但如果它有另一个具有相同属性但值不同的对象,则测试不会失败。
是否可以?在此之前,我一直使用静态索引,因为该数组中只有一个元素。
我正在尝试运行Cucumber测试用例场景,并在IntelliJ-IDEA. 我已将文件发布build.gradle在这里。我不知道为什么我一运行程序就收到此错误。有人可以告诉我如何解决这个问题吗?我已经收到此错误一天多了,但仍然没有解决方案。
错误堆栈跟踪
\njava.lang.NoClassDefFoundError: io/restassured/path/xml/mapper/factory/JAXBObjectMapperFactory\n at io.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41)\n at io.restassured.RestAssured.<clinit>(RestAssured.java:420)\n at AbtMainTestControl.PostJsonDetail.postJsonPayload(PostJsonDetail.java:17)\n at AbtMainTestControl.AbtCardPavTest.first_PAV_is_Transact(AbtCardPavTest.java:110)\n\nCaused by: java.lang.ClassNotFoundException: io.restassured.path.xml.mapper.factory.JAXBObjectMapperFactory\n at java.net.URLClassLoader.findClass(URLClassLoader.java:382)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:418)\n at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:351)\n at io.restassured.config.RestAssuredConfig.<init>(RestAssuredConfig.java:41)\n at io.restassured.RestAssured.<clinit>(RestAssured.java:420)\n at AbtMainTestControl.PostJsonDetail.postJsonPayload(PostJsonDetail.java:17)\n at AbtMainTestControl.AbtCardPavTest.first_PAV_is_Transact(AbtCardPavTest.java:110)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at cucumber.runtime.Utils$1.call(Utils.java:26)\n at cucumber.runtime.Timeout.timeout(Timeout.java:16)\n at cucumber.runtime.Utils.invoke(Utils.java:20)\n at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:57)\n at cucumber.runner.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:50)\n at cucumber.runner.TestStep.executeStep(TestStep.java:65)\n at cucumber.runner.TestStep.run(TestStep.java:50)\n at cucumber.runner.PickleStepTestStep.run(PickleStepTestStep.java:43)\n at cucumber.runner.TestCase.run(TestCase.java:46)\n at cucumber.runner.Runner.runPickle(Runner.java:50)\n at cucumber.runtime.Runtime$1.run(Runtime.java:104)\n at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n at java.util.concurrent.FutureTask.run(FutureTask.java:266)\n at cucumber.runtime.Runtime$SameThreadExecutorService.execute(Runtime.java:258)\n at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)\n at …Run Code Online (Sandbox Code Playgroud) java intellij-idea gradle rest-assured rest-assured-jsonpath
我正在使用Json Path库来解析 JSON。我遵循的 json 具有带空格的键:
{
"attributes": {
"First Name": "Jim",
"Last Name": "Rohn"
}
}
Run Code Online (Sandbox Code Playgroud)
为了获取 的值First Name,我编写了如下代码(json其中包含 json 的对象在哪里)-
String firstName = JsonPath.from(json).getString("attributes.First Name");
Run Code Online (Sandbox Code Playgroud)
但它会导致以下错误 -
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: expecting EOF, found 'Attributes' @ line 1, column 67.
.First Name
Run Code Online (Sandbox Code Playgroud)
您能否建议如何使用json-path库获取具有空格的键的值?
从 JsonPath 对象中提取数据时得到 null,下面是 json 响应数据
{
"status": "OK",
"header": {
"headerAttributes": {}
},
"errors": [],
"payload": {
"totalCount": 0,
"returnTerms": []
}
}
Run Code Online (Sandbox Code Playgroud)
从“totalCount”中提取值的java方法
public void getjsonValue() {
JsonPath jsonPathEvaluator = response.jsonPath();
System.out.println(jsonPathEvaluator.get("$['payload']['totalCount']"));
}
Run Code Online (Sandbox Code Playgroud)