java - 我将如何为可以处理动态字段的 Gson 对象建模?

标签 java json gson

我的应用程序正在与之通信的 API 发送如下响应:

{
    Code: 200,
    Message: "HELLO",
    Data: []
}

数据字段始终是SOMETHING 的数组。但是那个东西可以是一个文本节点,另一个数组,或者任何其他的各种不同的对象。

在下面的示例中,数据节点是一个汽车对象数组的数组。

Data: [ [ {car:1}, {car:2} ] ]

另一个返回类型可以是一个昆虫对象数组:

Data: [ {insect : spider} ]

我想设计一个 Gson 对象来处理这个问题,并且想知道最好的方法是什么。

我的第一个想法是有一个抽象类来保存 CodeMessage 字段,然后有许多子类型都有自己的 Data 字段。然后我会调用 .fromJson() 将其传递给子类。

是否有更优化的设计方式让 Gson 处理这些差异?

最佳答案

我想出了我认为最好的答案。相当简单!

通过在传递给 Gson 之前创建 TypeToken 使类通用并提供类型:

   public class Response<T> {

        private String code;
        private String message;
        private List<T> data;
    }

然后在使用Gson时:

   Type myCarListResponse = new TypeToken<Response<List<Car>>>(){}.getType();
   Response<List<Car>> response = gson.fromJson(json, myCarListResponse);

将 > 替换为您希望从 Data 节点获得的类型。上面的示例满足原始帖子中的第一个示例。

为了满足第二个例子:

  Type myInsectResponse = new TypeToken<Response<Insect>>(){}.getType();
  Response<Insect> response = gson.fromJson(json, myInsectResponse);

关于java - 我将如何为可以处理动态字段的 Gson 对象建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038271/

相关文章:

java - 在哪种情况下 "a != a"可以返回 "true"?

javascript - 尝试从对象获取属性时为 "Uncaught TypeError: Cannot read property ' x ' of undefined"

json - Swagger 在 Docker Image 中使用本地 json 文件运行

javascript - 如何在 Javascript 中使用 JSON 文件作为对象数组

java - JSON 到 GSON HashMap

java - & 在插入语句中的含义

google-app-engine - Java GAE maven配置问题?只是另一个验证错误

java - 使用 gson 从对象列表中获取 JSON 字符串

java - 从 jsp 调用操作方法

java - 使用 Gson 序列化 Java 对象的字段对象