美文网首页
Gson教程五(译):Sets的映射

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

作者: WeberLisper | 来源:发表于2017-10-23 17:22 被阅读44次

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


    相关文章

      网友评论

          本文标题:Gson教程五(译):Sets的映射

          本文链接:https://www.haomeiwen.com/subject/fubauxtx.html