当前位置: 首页 > 知识库问答 >
问题:

如何检索jsonPath()返回的映射值。getMap放心的方法

公西俊民
2023-03-14

如何检索由jsonPath(). getMap返回的map的值放心的方法我正在尝试在Map中获得下面api上的响应,我能够成功地获得但是当我尝试访问下面代码中键"id"的值时,我在"String 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"
    }
}

共有3个答案

贾兴学
2023-03-14

试试这个:

import com.jayway.restassured.path.json.JsonPath;

JsonPath extractor = JsonPath.from(apiResponse.toString());
String id = extractor.getString("data.id");
方斌
2023-03-14

正确的代码是

    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));
仉姚石
2023-03-14

试试下面的代码,对我来说很好:

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 of(String, String)更改为Map(Object, Object),因为我们知道map的每个键都是字符串,但value可以是任何数据类型。

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

 类似资料:
  • 我正在测试返回地图的控制器 测试: 我应该使用哪个表达式从映射中读取键和值? 编辑:解决这个问题的方法可能是: 然后循环通过地图检查值。但是,有没有一种方法可以使用<code>jsonPath</code>来实现这一点?

  • 我试图使用Rest assured和JsonPath从pzSetRuleSetFilter字段中提取一个值,其中pyRuleSetName等于某个值(在本例中为商标)。我一直得到下面的错误。任何关于如何解决这个问题并提取价值的想法都是很好的 无效的JSON表达式:script1.groovy:1:需要EOF,发现“[”@第1行,第39列。 我的查询system.out.println(respon

  • 我需要从从 Rest Assured 建模请求返回的 JSON 响应数据中获取两个值: 这抛出和 获取这些的正确、最好的方法是什么?我知道我可以链接关闭请求,但不确定如何获取

  • 输入是一个哈希映射,比如 我想写一个方法,返回类型A的列表,其中有键,值属性与字符串类型,和键值从hashmap。 如何让它成为现实?

  • 我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!

  • 我想询问一个人,并得到以下回应: 但在需要时,我还想包含字段,并获得如下内容: 但是,我得到的只是手机ID,就像这样: 这是两个有问题的领域: