Gson - Map 结构映射
来源:互联网 发布:沃虎送货单软件 编辑:程序博客网 时间:2024/05/18 01:10
原文链接:Gson — Mapping of Maps
原文出自:Norman Peitek
译者:無名無
在介绍使用 Gson 解析一些基本数据结构之后,我们来看下如何使用Gson 来序列化和反序列化 Java 中的 Map 数据类型。
Java Map 序列化
Java 中的 Map 是一个非常灵活的数据结构,被用在很多场景,使用 Java 可以自由的实现应用。
先来看一个例子,使用 HashMap 实现:
HashMap<String, List<String>> employees = new HashMap<>();employees.put("A", Arrays.asList("Andreas", "Arnold", "Aden"));employees.put("C", Arrays.asList("Christian", "Carter"));employees.put("M", Arrays.asList("Marcus", "Mary"));
序列化过程和其他类型一样,调用 Gson 的 toJson 就可以了,例如:
Gson gson = new Gson();String employeeJson = gson.toJson(employees);
输出:
{ "M": [ "Marcus", "Mary" ], "C": [ "Christian", "Carter" ], "A": [ "Andreas", "Arnold", "Aden" ]}
正如 Java Map 结构一样,每个 Key 对应这个一个集合。
Java Map 反序列化
和上一篇的 JSON 数据对比,我们发现有些不一样,这里的 key 是变化的,而不像 List 那样是固定的字段名。
{ "1$": { "amount": 1, "currency": "Dollar" }, "2$": { "amount": 2, "currency": "Dollar" }, "3€": { "amount": 3, "currency": "Euro" }}
Json 数据中包含三个对象,每个对象有自己的值,但是我们发现 Json 数据更像一个 Map 结构1
以下是区分 JSON 数据类型的一些简单的方法:
- 根据你的文档解释或者应用场景
* 键和值是否是一种类型 - 键和值是否是动态的
我们假设本例子就是一个map结构的数据,之前我们使用TypeToken来标志过list类型,这里我们需要创建一个map类型的TypeToken类型。
public class AmountWithCurrency { String currency; int amount;}String dollarJson = "{ '1$': { 'amount': 1, 'currency': 'Dollar'}, '2$': { 'amount': 2, 'currency': 'Dollar'}, '3€': { 'amount': 3, 'currency': 'Euro'} }";Gson gson = new Gson();Type amountCurrencyType = new TypeToken<HashMap<String, AmountWithCurrency>>(){}.getType();HashMap<String, AmountWithCurrency> amountCurrency =gson.fromJson(dollarJson, amountCurrencyType);
Debug 如下:
嵌套的 Map
Map 数据结构没有根元素,如 “[“,我们就可以像解析 List 那用解析嵌套的 Map。
总结
学习使用 Gson 来序列化和反序列化 Map 结构,下一篇我们将介绍一种类似的数据结构。
你可以通过评论或twitter @futurestud_io 反馈你的问题。
练习代码已上传 Github https://github.com/whiskeyfei/Gson-Review 可自行查看。
Gson 系列文章翻译回顾
1、Gson - Java-JSON 序列化和反序列化入门
2、Gson - 映射嵌套对象
3、Gson - Arrays 和 Lists 映射对象
4、Gson - Map 结构映射
5、Gson - Set 集合映射
6、Gson - 空值映射
7、Gson Model Annotations - 如何使用 @SerializedName 更改字段的命名
8、Gson Model Annotations - @SerializedName 匹配多个反序列化名称
9、Gson Builder - 基础和命名规则
10、Gson Builder - 序列化空值
11、Gson Builder - 忽略策略
12、Gson Builder - Gson Lenient 属性
13、Gson Builder - 特殊类型 Floats & Doubles
17、Gson Builder - 如何使用 @Expose 忽略字段
19、Gson Advanced - 映射枚举类型
20、Gson Advanced - 映射循环引用
21、Gson Advanced - 泛型
22、Gson Advanced - 简单自定义序列化 (Part 1)
24、Gson Advanced - 自定义反序列化基础
25、Gson Advanced - 自定义对象实例创建
26、Gson Advanced - 通过 @JsonAdapter 自定义(反)序列化过程
32、Practical Gson - 如何解析多态对象
- Gson - Map 结构映射
- Spring-RequestBody映射MAP结构
- Gson-Set 集合映射
- Gson-空值映射
- Gson转Map
- Gson操作Map
- Gson JsonString to Map
- 映射map
- Map----映射
- map 映射
- map映射
- HDU1075-字符串映射-字典树&map
- java Gson转map与map转gson
- Gson-----6、Map处理(上)
- Gson-----7、Map处理(下)
- gson解析map和list
- map[映射]转
- Hibernate集合映射---Map
- 简单记录一下phpmyadmin的https配置
- Android调用系统自带的文件管理器进行文件选择并获得路径,android文件管理器
- Socket通信,实现单客户端和服务器交互的C/S结构
- Gson - Arrays 和 Lists 对象映射
- 第十五周项目1-验证算法
- Gson - Map 结构映射
- 直播平台的高并发架构设计
- 如何利用离散Hopfield神经网络进行数字识别(1)
- Gson-Set 集合映射
- POJ 3299 Humidex
- HDU-2962-Trucking
- linux内核中的list详解
- Linux 下 strace 命令用法总结
- Android HTTPS详解