如何检索 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");