Gson教程五(译):Sets的映射

2017-10-23  本文已影响44人  WeberLisper

该文章翻译自Gson Tutorial Series系列教程。该篇主要阐述了如何使用Gson映射Sets。

序列化Java Sets

Java的集合框架包括大量的数据结构。我们已经讨论过lists和maps,它们在JSON的表达中有些许不同。这周,我们探究Sets。HashSet可以使你的数据集合例子中的值保持唯一性。因为sets有其存在的理由并且应用有现实世界,Gson也需要有能力去处理它们。

因此,让我们来看这样一个例子。你的app拥有这样一个功能,可以使得众多的用户可以加入到一个团队中。当然,每一个用户只能加入一次,因此我们使用HashSet去保存用户的名字。

使用Java的实现如下:

HashSet<String> users = new HashSet<>();  
users.add("Christian");  
users.add("Marcus");  
users.add("Norman");  
users.add("Marcus"); // would not be added again  

sets的序列化和其他类型是一样的。你仅仅需要把它扔给Gson:

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

结果如下所示:

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

正如你所看到的,JSON采用和list一样的表达方式来表达set。是的,Java处理二者之间的内在逻辑是完全不同的,但是对于高层来说,它们存储相同的数据。对于如JSON这样的不管如何实现的语言来说,内在细节是无关紧要的。

反序列化Java Sets

正如我们上面所提到的,lists和sets在JSON中的表达都是相同的。因此,因此,Gson乐意将一个宽泛的JSON反序列化为上面的无论哪一种数据类型。还记得之前的flowerCount例子吗?在我们可以使用JSON转换为无论哪一种之前,我们先查看一下:

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

和处理lists是一样的。我们为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变量拥有和之前博客中相同的内容,仅仅是数据类型不同而已:


上一篇下一篇

猜你喜欢

热点阅读