ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Gson – 序列化和反序列化包含自定义对象的`HashMap` > 原文: [https://howtodoinjava.com/gson/gson-serialize-deserialize-hashmap/](https://howtodoinjava.com/gson/gson-serialize-deserialize-hashmap/) 了解使用 Google [Gson](https://howtodoinjava.com/apache-commons/google-gson-tutorial-convert-java-object-to-from-json/) 库对`HashMap`进行序列化。 另请学习**使用 Gson 将 JSON** 字符串反序列化为包含自定义对象的[`HashMap`](https://howtodoinjava.com/java-hashmap/),以便将字段值复制到适当的[通用类型](https://howtodoinjava.com/java/generics/complete-java-generics-tutorial/)中。 这些转换可用于创建`HashMap`的[深层克隆。](https://howtodoinjava.com/java/collections/hashmap/shallow-deep-copy-hashmap/) ## 1.将包含通用类型的`HashMap`序列化为 JSON 使用 Gson 将`HashMap`序列化为 JSON 很容易。 转换`HashMap`之后,只需使用`gson.toJson()`方法即可获取 JSON 字符串。 使用 Gson 将`HashMap`转换为 JSON 字符串的 Java 程序。 ```java HashMap<Integer, Employee> employeeMap = new HashMap<>(); employeeMap.put(1, new Employee(1l, "Alex", LocalDate.of(1990, 01, 01))); employeeMap.put(2, new Employee(2l, "Bob", LocalDate.of(1990, 02, 01))); //Deep clone Gson gson = new Gson(); String jsonString = gson.toJson(employeeMap); ``` ```java { "1": { "id": 1, "name": "Alex", "dob": { "year": 1990, "month": 1, "day": 1 } }, "2": { "id": 2, "name": "Bob", "dob": { "year": 1990, "month": 2, "day": 1 } } } ``` 此处的`Employee`类为: ```java import java.time.LocalDate; public class Employee implements Comparable<Employee>{ private Long id; private String name; private LocalDate dob; public Employee(Long id, String name, LocalDate dob) { super(); this.id = id; this.name = name; this.dob = dob; } @Override public int compareTo(Employee o) { return this.getId().compareTo(o.getId()); } //Getters and setters @Override public String toString() { return "Employee [id=" + id + ", name=" + name + ", dob=" + dob + "]"; } } ``` ## 2.将 JSON 转换为包含自定义对象的`HashMap` 要将 JSON 字符串反序列化回`HashMap`涉及两个步骤: 1. 创建代表通用类型的[`com.google.gson.reflect.TypeToken`](https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/reflect/TypeToken.html)。 它强制客户端创建此类的子类,即使在运行时也可以检索类型信息。 2. 使用`gson.fromJson()`方法从 JSON 字符串获取`HashMap`。 Java 程序将 JSON 解析为包含通用类型的`HashMap`对象。 ```java import java.lang.reflect.Type; import java.time.LocalDate; import java.util.HashMap; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class GsonExample { public static void main(String[] args) { HashMap<Integer, Employee> employeeMap = new HashMap<>(); employeeMap.put(1, new Employee(1l, "Alex", LocalDate.of(1990, 01, 01))); employeeMap.put(2, new Employee(2l, "Bob", LocalDate.of(1990, 02, 01))); //Deep clone Gson gson = new Gson(); String jsonString = gson.toJson(employeeMap); Type type = new TypeToken<HashMap<Integer, Employee>>(){}.getType(); HashMap<Integer, Employee> clonedMap = gson.fromJson(jsonString, type); System.out.println(clonedMap); } } ``` ```java {1=Employee [id=1, name=Alex, dob=1990-01-01], 2=Employee [id=2, name=Bob, dob=1990-02-01]} ``` 学习愉快!