如何将 RestAssured 响应转换为 Java 列表

How to convert RestAssured Response to Java List

[
{
    "tags": [],
    "id": "aaaaaaaaaaaa",
    "author": "admin",
    "type": "profile",
    "description": "",
    "name": "defaultProfile1",
    "display_name": "Default1"
},
{
    "tags": [],
    "id": "bbbbbbbbbbbbb",
    "author": "admin",
    "type": "profile",
    "description": "test profile",
    "name": "defaultProfile2",
    "display_name": "Default2"
}]

这是我从 Get 请求获得的响应,如何将此响应转换为 Java 列表,以便我可以在列表上执行 Stream().filter。

你这里有一个 JSON 对象数组。

您可以轻松地将其转换为 Java classes 以更有效地使用过滤器。

创建一个名为 class 的用户对象,它表示单个 JSON 对象,如下所示:

public class UserObject {
    public List<String> tags;
    public String id;
    public String author;
    public String type;
    public String description;
    public String name;
    @JsonProperty(value = "display_name")
    public String displayName;
}

然后,使用 JsonPath 将 JSON 转换为这些对象的列表:

    JsonPath path = JsonPath.from(json); //String or File
    List<UserObject> users = Arrays.asList(path.getObject(".", UserObject[].class));

基本上,您将 JSON 映射到 UserObject[] 数组并将其转换为 List 以进行流处理。

path.getObject中的点表示"start with the root of JSON"

要使用 stream().filter() 首先需要将 JSON 转换为 POJO 然后你可以使用 Jackson 提供的对象映射器,下面是依赖项:-

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

要将您的 JSON 转换为 POJO,您可以在下面使用,或者您可以命名您想要的 class:-

public class Author {
public List<String> tags;
public String id;
public String author;
public String type;
public String description;
public String name;
@JsonProperty(value = "display_name")
public String displayName;

// getter - setter 

}

最后,我们必须创建作者列表,以便您可以在那里使用流:-

List<Author> list = Arrays.asList(mapper.readValue(json, Author[].class));

代替 json,您可以放置​​从 GET api 获得的响应。 现在您已经从 JSON 创建了项目列表。所以你现在可以使用流了。

转到 http://www.jsonschema2pojo.org/ 并将您的 JSON 转换为 Java class,它会自动将 JSON 更改为 Java POJO,并且您可以用来获取响应,假设你的 POJO Class 名称是 PojoResponseClass

Gson g = new Gson();
    PojoResponseClass resObj = g.fromJson(response.asString(), PojoResponseClass.class);