如何检索由 jsonPath().getMap 方法返回的映射值



如何检索 jsonPath((.getMap 返回的映射值 放心的方法 我正在尝试在 Map 中的以下 api 上获取响应,我能够成功获得,但是当我尝试访问以下代码中键"id"的值时,我在行"字符串 id = test.get("id"(;"上收到强制转换错误

public void testRestAssured() {
Response apiResponse = RestAssured.given().get("https://reqres.in/api/user/2");
Map<String, String> test = apiResponse.jsonPath().getMap("data");
System.out.println(test);
String id = test.get("id");
System.out.println("ID : " + id);
}

错误

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

我尝试做很多事情,例如

String id = test.get("id").toString();      
or
String id = String.valueOf(test.get("id"));

但没有任何帮助解决

API 响应如下

{
"data": {
"id": 2,
"name": "fuchsia rose",
"year": 2001,
"color": "#C74375",
"pantone_value": "17-2031"
}
}

尝试以下代码,它对我来说工作正常:

Response apiResponse = RestAssured.given().get("http://reqres.in/api/user/2");
Map<Object, Object> test = apiResponse.jsonPath().getMap("data");
System.out.println(test);
String id = test.get("id").toString();
System.out.println("ID : " + id);

我所做的更改是:将映射(字符串,字符串(更改为映射(对象,对象(,因为我们知道map的每个键都是字符串,但值可以是任何数据类型。

我希望它能解决你的问题。

正确的代码是

Response apiResponse = RestAssured.given().get("http://reqres.in/api/user/2");
Map<Object, Object> test = apiResponse.jsonPath().getMap("data");
System.out.println(test);
for (Object e : test.keySet()) {
System.out.println(" Key is " + e + "  , value is " + test.get(e));

只需尝试一下:

import com.jayway.restassured.path.json.JsonPath;
JsonPath extractor = JsonPath.from(apiResponse.toString());
String id = extractor.getString("data.id");

您应该为映射值定义对象。因为您的 json 值是不同的类型(字符串和整数(。

// define Object type for map values
Map<String, Object> test = apiResponse.jsonPath().getMap("data");

// use casting for assigning
int id = (int) test.get("id");

你真的需要从你的响应映射对象制作吗?

如果没有,您可以使用这个:

String id = RestAssured.given().get("https://reqres.in/api/user/2")
.then().extract().jsonPath().getString("data.id");

相关内容

  • 没有找到相关文章

最新更新