Gson教程五(译):Sets的映射
来源:互联网 发布:除了淘宝联盟还有什么 编辑:程序博客网 时间:2024/06/04 20:10
该文章翻译自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 0
- Gson教程五(译):Sets的映射
- Gson教程三(译):Arrays和Lists的映射
- Gson教程四(译):Maps的映射
- Gson教程六(译):空值的映射
- Gson教程十一(译):轻松使用仁慈的Gson(容错机制)
- Gson教程十(译):Exclusion Strategies
- Gson教程一(译):Java-JSON的序列化和反序列化
- Gson教程二(译):嵌套对象的序列化和反序列化
- Gson教程十二(译):Float和Double类型的特殊值
- Gson源码学习笔记(1)——Gson使用教程(译)
- Gson教程七(译):@SerializedName和@Expose
- Gson教程八(译):GsonBuilder基础和命名策略
- Gson教程九(译):强制序列化null值
- 五分钟搞懂Gson的用法
- 五分钟搞懂Gson的用法
- 五分钟搞懂Gson的用法
- Gson 教程
- redis 数据类型(五) zset sorted sets的使用
- 浅谈oracle树状结构层级查询
- EasyDarwin搭建rtsp服务器
- Ceph Recovery分析
- lightoj 1018
- 储存过程中创建uuid方法
- Gson教程五(译):Sets的映射
- 顺序栈与链式栈的实现
- vue Input
- 上传本地项目到GitLab
- 对刷机包的system.img修改,然后重新打包
- 微信H5支付,获取用户真实ip
- Codeforces 842 C. Ilya And The Tree (dfs)
- Hibernate的二级缓存
- Mysql中not in的注意问题