简体   繁体   中英

Rest assured and Java: how to get wanted JSON object/body?

Lets assume I have a GET request that returns something like the following:

 [
  {
    "id": 1,
    "name": "Mark"
  },
  {
    "id": 2,
    "name": "Steve"
  },
  {
    "id": 3,
    "name": "Bill"
  }
]

How can I return the wanted object from a List? or something that contains maybe this JSON as a String or what is the correct approach to get only one of the items from the response for example lets say i need to get Bills info only so i want to parse that JSON to get only this:

  {
    "id": 3,
    "name": "Bill"
  }

And no, I do not want to do this parsing in the GET request URL. I need to be able to get it from the list of everything that the GET request returns.

"$[2]"

In JsonPath, $ represents the anonymous root of the queried JSON, for cases like this one when you need to refer to it directly instead of stuff like "stuff.things[8]"

In this case, the array you're trying to analyze is the anonymous root, so you refer to it as $ . Then you want the element at index 2 of this array, so it's $[2]

I did another solution that actually fits exactly for my needs. I deserialized the JSON response into a List of POJO classes that the JSON body corresponds like this:

List<MyEntity> myList = new ArrayList<>();

    myList = given().
            contentType(ContentType.JSON).
    when().
            get(getURL).
    then().
            extract().
            body().
            jsonPath().
            getList(".", MyEntity.class);

This way I get a List of the initialized MyEntity classes and I can just do anything I need to, for example I just modify the values like this:

myList.get(0).setName("newName");

Then I can just send them back with a POST/PUT calls or something like that. Works like a charm!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM