java - 如何读取通用列表中的 JSON

标签 java json generics jackson gson

我有一个调用 REST Web 服务的帮助程序类。该帮助程序类从定义为通用“R”的类中的 Web 服务接收信息。我可以轻松地使用 GSON 读取 POJO 中的 JSON,但我不知道如何给它一个列表并正确读取它。

到目前为止,我尝试提取变量中 R 的类型并将其传递给 List,但没有成功。我尝试过使用 Jackson 及其 TypeFactory,也没有成功,它不会将 R 作为其参数。

我想做的是这样的:

resource = new GsonBuilder().create().fromJson(response,List<R>)

或与 jackson

resource = mapper.readValue(response, List<R>);

“response”是我的 JSON 字符串,资源是我想要返回的 List 实例。

我可以使用 GSON 或 Jackson。我一直在尝试两者,因为有些事情看起来更可能使用其中之一。

我能够使其与非泛型一起工作,但我使用泛型得到的只是 JSON 字段的映射列表的列表。它基本上忽略了 R 的类型。

此外,R 是从一个名为 BaseResource 的类扩展而来的,因此我知道 R 将始终是 BaseResource 的子级,但我需要的字段位于子级中。

奖励:我真正的最终目标是让我的通用 R 成为特定对象的列表。所以如果我可以:

resource = new GsonBuilder().create().fromJson(response,R)

和 R 可以是 BaseResource 或 List。我已经让它适用于 BaseResource,但我需要它以某种方式使其适用于 List,方法是复制其中的大部分内容并明确声明它是一个 List,或者将 List 传递给 R。

我们当前的解决方法是使用一个包含列表的包装器:

private class Result{
    private List<BaseResource> result;
}

但我们希望 Web 服务返回列表而不是类似的包装器。

最佳答案

使用 GSON,您必须实现自己的序列化器,请参阅:Type Information within serialized JSON using GSON

如果您要使用 Jackson,您可以使用 @JsonTypeInfo 注释来解决此问题 多态类型:https://www.logicbig.com/tutorials/misc/jackson/jackson-json-type-info-annotation.html

关于java - 如何读取通用列表中的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676552/

相关文章:

ios - AF网络和发送数组错误

swift - 具有通用功能的相关类型协议(protocol)的协议(protocol)

java - Java 中泛型类型的子类

java - 在我们的应用程序中最好使用静态最终变量或最终变量

java - JSONObject - 如何获取值?

java - 类从泛型父类(super class)扩展但不指定泛型类型

Java 泛型 put-get 规则

java - 在java中将大文件的数据缓存在内存中

java - 如何分配时间

javascript - JSON 响应 {"d":"128.00"} 但显示 "128"