放心:使用Java从Json Response中提取值列表

时间:2019-01-12 18:45:40

标签: json rest-assured

我有一个JSON响应,想从响应中提取值列表,例如id的所有当前值。

{
"page": 2,
"per_page": 3,
"total": 12,
"total_pages": 4,
"data": [
    {
        "id": 4,
        "first_name": "Eve",
        "last_name": "Holt",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
    },
    {
        "id": 5,
        "first_name": "Charles",
        "last_name": "Morris",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"
    },
    {
        "id": 6,
        "first_name": "Tracey",
        "last_name": "Ramos",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"
    }
]
}

我尝试了下面的代码,但无法实现,但仅打印id的第一个值,即4。

public class Get_Request {

public static void main(String[] args) {

    RestAssured.baseURI = "https://reqres.in/";

    Response res  = given()
      .param("page", "2")
    .when()
      .get("/api/users")
    .then()
      .assertThat()
      .contentType(ContentType.JSON)
      .and()
      .statusCode(200).extract().response();

    /*String data = res.jsonPath().getString("data[0].first_name");

    System.out.println(data);
    */

    List<HashMap<String,Object>> allids = res.jsonPath().getList("data");


    HashMap<String,Object> firstid = allids.get(0);

    Object a =  firstid.get("id");

    System.out.println(a);


    }
}

我是初学者,请放心,我不确定我们是否可以实现同样的目标。任何帮助,将不胜感激。预先感谢。

3 个答案:

答案 0 :(得分:2)

下面的代码将找到响应中存在的所有ID,并将其打印为4 5 6

List<Integer> ids = res.jsonPath().getList("data.id");

    for(Integer i:ids)
    {

        System.out.println(i);
    }

答案 1 :(得分:1)

可以通过将路径更改为 data.id

来完成
df['new_customer_subscription'] = (df[['new_customer', 'y']] > 0).all(1).astype(int)

答案 2 :(得分:0)

您可以使用JsonPath通配符从response中提取数据,这样可以避免您每次有此要求时都编写代码,请在JsonPath下面使用从响应中提取ID列表:

$..id