当前位置: 首页 > 知识库问答 >
问题:

如何用GSON反序列化不同对象数组

柴辰阳
2023-03-14

我像这样接收JSON

[
  {
    "albums" : [
      {"id":"0", "name":"name"},
      {"id":"1", "name":"name"}
    ],
    "name":"name"
  },
  {
    "tracks" : [
      {"id":"0", "name":"name", "duration":"3:30"},
      {"id":"1", "name":"name", "duration":"2:40"}
    ],
    "name":"name"
  },
  {
    "playlists" : [
      {"id":"0", "name":"name", "tracksCount":"3"},
      {"id":"1", "name":"name", "tracksCount":"40"}
    ],
    "name":"name"
  }
]

当然,我实现了包含所有字段和类的类Track、Album和Playlist

Tracks {
  String name;
  List<Track> tracks;
}
Albums {
  String name;
  List<Album> albums;
}
Playlists {
  String name;
  List<Playlist> playlists;
}
Gson gson = new Gson();
JsonResponse[] rez = gson.fromJson(str, JsonResponse[].class);
class JsonResponse {
  Albums albums;
  Tracks tracks;
  Playlists playlists;
}
[
  {
    "albums" : [
      {"id":"0", "name":"name"},
      {"id":"1", "name":"name"}
    ],
    "name":"name"
  }
 ]

顺便说一句,我不能改变JSON。所以我需要一个代码来解析它。

共有1个答案

糜野
2023-03-14

最近我使用了RuntimeTypeAdapterFactory来实现同样的目的,它是一个简单的干净的解决方案。它是一个开放的Gson集成(额外)

请查看本文中的active example https://jansipke.nl/serialize-and-deserialize-a-list-of-polymorphic-objects-with-gson/I将原始代码从github直接导入到我的项目中(因为类不直接拥有maven依赖项):

代码https://raw.githubusercontent.com/google/gson/master/extras/src/main/java/com/google/gson/typeAdapters/runtimetypeAdapterFactory.java

希望有所帮助

 类似资料:
  • 当我试图使用Gson库反序列化JSON对象数组时,我遇到了一个问题。 JSON数组的一个示例: 你怎么认为?反序列化这种JSON响应的正确Java代码是什么?

  • 问题内容: 我在尝试使用Gson库反序列化对象的JSON数组时遇到问题。 JSON数组的示例: 你怎么看?反序列化此类JSON响应的正确Java代码是什么? 问题答案: 要反序列化JSONArray,您需要使用TypeToken。您可以从GSON用户指南中了解更多信息。示例代码: 如果您有JSONArray,则可以使用

  • 问题内容: 确定,所以我编辑了问题,因为它不够清楚。 编辑2 :更新了JSON文件。 我在Android应用程序中使用GSON,我需要解析来自服务器的JSON文件,这些文件有点太复杂了。我不想让我的对象结构太沉重,所以我想简化内容: 所以我的对象的结构将不是JSON文件的结构。 例如,如果在JSON中,我有以下内容: 我不想保留我当前的对象结构,即一个对象,其中包含一个和一个“总计”。但是我只想将

  • 主要内容:示例我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个类。 然后将对象列化后存储在文件中,该文件将具有对象的json表示形式。 示例 在中创建一个名为的Java类文件,参考以下代码 - 执行上面示例代码,得到以下结果 -

  • 打完电话后 我只填充了的和。列表始终保持。我怎么才能修好这个?