美文网首页
Gson——Set的映射

Gson——Set的映射

作者: 签到钱就到 | 来源:发表于2016-08-30 19:46 被阅读645次

    原文链接:Gson — Mapping of Sets

    作者:Norman Peitek

    翻译:签到钱就到

    前面的两篇博客,我们展示了如何用Gson映射List数据Java Map。本文中,你将要学习如何序列化(反序列化)Java集合(Set)。

    当然,这不是我们Gson系列里唯一的一篇文章,如果你对其他的主题感兴趣,可以看一下我们的大纲:

    Gson系列概览

    1. 用java-JSON实现序列化合反序列化
    2. 嵌套对象的映射
    3. 数组和列表对象的映射
    4. Map的映射
    5. Set的映射
    6. 空值的映射
    7. Gson Model Annotations — How to Ignore Fields with @Expose
    8. Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
    9. Gson Builder — Basics & Naming Policies
    10. Gson Builder — Force Serialization of null Values
    11. Gson Builder — Exclusion Strategies
    12. Gson Builder — Relax Gson with Lenient
    13. Gson Builder — Special Values of Floats & Doubles
    14. Gson Builder — Model Versioning
    15. Gson Builder — Formatting of Dates & Custom Date/Time Mapping
    16. Gson Builder — Pretty Printing
    17. 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

    相关文章

      网友评论

          本文标题:Gson——Set的映射

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