翻译:签到钱就到
前面的两篇博客,我们展示了如何用Gson映射List数据和Java Map。本文中,你将要学习如何序列化(反序列化)Java集合(Set)。
当然,这不是我们Gson系列里唯一的一篇文章,如果你对其他的主题感兴趣,可以看一下我们的大纲:
Gson系列概览
- 用java-JSON实现序列化合反序列化
- 嵌套对象的映射
- 数组和列表对象的映射
- Map的映射
- Set的映射
- 空值的映射
- Gson Model Annotations — How to Ignore Fields with @Expose
- Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
- Gson Builder — Basics & Naming Policies
- Gson Builder — Force Serialization of null Values
- Gson Builder — Exclusion Strategies
- Gson Builder — Relax Gson with Lenient
- Gson Builder — Special Values of Floats & Doubles
- Gson Builder — Model Versioning
- Gson Builder — Formatting of Dates & Custom Date/Time Mapping
- Gson Builder — Pretty Printing
- Gson Builder — HTML Escaping
Java Set的序列化
Java的集合框架里包含了多种数据类型。我们已经学习了List和Map,它们在JSON的表现形式上有点差异。这周,我们会研究一下集合。一个HashSet
是一个非常好的方式确保你的数据集合的唯一性。由于集合有存在的理由,且在真实世界里广泛使用,Gson也应当能处理他们。
让我们回顾一下已有的场景,你的应用有些特性,许多用户可以加入组成一个团队。当然,每个用户只能加入一次,这样,我们使用一个HashSet
去保存用户的姓名。
我们用Java实现,我们可能写出下面的代码:
HashSet<String> users = new HashSet<>();
users.add("Christian");
users.add("Marcus");
users.add("Norman");
users.add("Marcus"); // would not be added again
集合的序列化与其他类型一样,你可以直接抛给Gson去处理,它会返回正确的结果:
Gson gson = new Gson();
String usersJson = gson.toJson(users);
结果如下:
[
"Marcus",
"Christian",
"Norman"
]
正如你所见,集合的JSON展示是跟列表一样的。是的,Java内部处理方式不一样,但更高层次,他们都是以一样的数据存储。对于像JSON一样技术无关的标记法,内部细节并不重要。
Java Set的反序列化
正如我们前面提到的,JSON对于Set的实现与List是一样的。因此,Gson也乐于将一个有效的JSON转换为java数据类型。记得我们在列表/数组那篇博客里的flowerCount
的例子么?因为我们可以对于任何一个使用JSON,看看代码:
[
{
"name": "Christian",
"flowerCount": 1
},
{
"name": "Marcus",
"flowerCount": 3
},
{
"name": "Norman",
"flowerCount": 2
}
]
我们处理Set序列化的方式与List是一样的。我们为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);
展望
在这篇文章里你看到了如何对java Set进行序列化和反序列化。你知道在JSON上下文中,他们与列表其实都一样。现在我们已经探索了所有主要的数据类型,接下来将研究Gson的一些通用配置选项。
如果你需要反馈或有疑问,在评论中让我们知道或twitter @futurestud_io。
网友评论