Gson - Map 结构映射

作者: 無名小子的杂货铺 | 来源:发表于2016-12-05 16:31 被阅读1182次

原文链接: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$, 2$ ,3€ 是key

以下是区分 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 如下:

amountCurrency

嵌套的 Map

Map 数据结构没有根元素,如 "[",我们就可以像解析 List 那用解析嵌套的 Map。

总结

学习使用 Gson 来序列化和反序列化 Map 结构,下一篇我们将介绍一种类似的数据结构。

练习代码已上传 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 结构映射

    原文链接:Gson — Mapping of Maps原文出自:Norman Peitek译者:無名無 在介绍使用...

  • Gson——Map的映射

    原文链接:Gson — Mapping of Maps作者:Norman Peitek 翻译:签到钱就到 在发布了...

  • Map集合了解一下

    前言 Map映射Map映射的特点Map接口结构Map接口常见Api解析put(K key, V value)put...

  • 数据结构之集合与映射(二)

    本篇主要内容:映射Map及其实现,Map的应用,Map与Set的对比 映射Map 数据结构里的所谓映射是键值对的数...

  • Java数据结构总结之Map

    Java中使用Map接口描述映射结构,映射Map是一个独立的接口,描述的是键key-值value的对应关系,Map...

  • Gson解析内嵌map结构

    Gson可以解析map且支持范型,如: 如下代码解析: 但是如果json是这样的呢?如何解析data不是最外层的m...

  • Gson 系列文章

    gson教程 1、Gson - Java-JSON 序列化和反序列化入门2、Gson - 映射嵌套对象3、Gson...

  • Java 数据结构之 Map 学习总结

    Java 数据结构之 Map 学习总结 今天总结学习一下键值映射关系Map。 先了解下Map Map 是一种把键对...

  • 数据结构-映射(Map)

    Map 在有些编程语言中也叫做字典(dictionary,比如 Python、Objective-C、Swift ...

  • 数据结构——映射(Map)

    一、概述 映射是一种快速的键查找数据结构体,可用于灵活地对其单个元素进行索引。与 MATLAB® 软件中仅允许通过...

网友评论

    本文标题:Gson - Map 结构映射

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