迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Gson - 集合 Sets 的映射

作者:迹忆客 最近更新:2022/06/07 浏览次数:

在上两篇文章中,我们介绍了如何使用 Gson 映射列表数据Java Map 映射。 在这篇文章中,我们将学习如何(反)序列化 Java 集合。


Java 集合的序列化

Java 集合框架包含各种数据结构。 我们已经查看了列表和Map,它们的 JSON 表示形式存在一些差异。 这里,我们将看看集合(Sets)。 例如,HashSet 是确保数据收集唯一性的好方法。 由于集合的存在是有原因的并且在现实世界中使用,Gson 也需要能够处理它们。

因此,让我们通过一个动手的场景。 我们的应用程序具有多个用户可以作为一个组加入的功能。 当然,每个用户只能加入一次,所以我们使用 HashSet 来存储用户名。

如果我们在 Java 中实现它,我们将有下面的代码:

HashSet<String> users = new HashSet<>();  
users.add("Christian");  
users.add("Marcus");  
users.add("Norman");  
users.add("Marcus"); // 不会再添加

集合的序列化与任何其他类型相同。 我们可以把它扔给 Gson,它会做正确的事情:

Gson gson = new Gson();  
String usersJson = gson.toJson(users);  

生成的JSON如下所示

[
  "Marcus",
  "Christian",
  "Norman"
]

如大家所见,集合的 JSON 表示与列表的表示相同。 是的,Java 在内部对它们的处理方式完全不同,但在高层次上,它们都存储相同的数据。 对于像 JSON 这样的与实现无关的表示法,内部细节无关紧要。


Java 集合的反序列化

正如我们上面提到的,列表和集合的 JSON 表示是相同的。 因此,Gson 很乐意将有效的 JSON 反序列化为任何一种 Java 数据类型。 还记得列表/数组文章中的 flowerCount 示例吗? 由于我们可以将 JSON 用于任何一个,让我们来看看它:

[
    {
      "name": "Christian",
      "flowerCount": 1
    },
    {
      "name": "Marcus",
      "flowerCount": 3
    },
    {
      "name": "Norman",
      "flowerCount": 2
    }
]

我们处理集合序列化的方式与处理列表的方式相同。 我们为 Gson 创建一个 Type,然后让它发挥它的魔力:

String founderJson = "[{'name': 'Christian','flowerCount': 1}, {'name': 'Marcus', 'flowerCount': 3}, {'name': 'Norman', 'flowerCount': 2}]";

Gson gson = new Gson();

Type founderSetType = new TypeToken<HashSet<Founder>>(){}.getType();

HashSet<Founder> founderSet = gson.fromJson(founderJson, founderSetType);  

founderSet 变量实际上保存的内容与上一篇文章中的列表相同,只是数据类型不同:

Gson 集合反序列化

在这篇文章中,我们了解了如何从 JSON 序列化和反序列化 Java 集合。 我们已经了解到,在 JSON 上下文中,它们与列表没有什么不同。 现在我们已经探索了所有主要的数据类型,接下来将研究一些通用的 Gson 配置选项。

本站文章均为原创或翻译,转载请发邮件至 1244347461@qq.com 进行申请,未经许可,禁止转载。经作者同意之后,转载请以链接形式注明出处

本文地址:

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

教程更新

热门标签

扫码一下
查看教程更方便