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

该文章翻译自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变量拥有和之前博客中相同的内容,仅仅是数据类型不同而已:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值