Gson:解析JSON为复杂对象:TypeToken
需求
通过Gson,将JSON字符串,解析为复杂类型。
比如,解析成如下类型:
Map<String, List<Bean>>
依赖(Gson)
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
解决方案
使用 TypeToken
来定义复杂类型。
Type type = new TypeToken<复杂类型>() {}.getType();
代码示例
测试
package com.example.web.user;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import com.example.util.FileUtils;
import com.example.web.user.bean.User;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/**
* 测试:Gson解析字符串为复杂类型。
*/
public class Test {
public static void main(String[] args) {
// 读取文件内容
String json = FileUtils.read("config/group_user.json");
// 转为需要的类型
Gson gson = new Gson();
Type type = new TypeToken<Map<String, List<User>>>() {
}.getType();
Map<String, List<User>> map = gson.fromJson(json, type);
// 打印预览
System.out.println(map);
}
}
数据类
package com.example.web.user.bean;
import lombok.Data;
@Data
public class User {
private String id;
private String name;
private String tag;
}
Json文件
JSON文件 group_user.json
,内容如下:
{
"10": [
{
"id": "1001",
"name": "张三",
"tag": "10"
},
{
"id": "1002",
"name": "李四",
"tag": "10"
},
{
"id": "1003",
"name": "王五",
"tag": "10"
}
],
"20": [
{
"id": "2001",
"name": "小明",
"tag": "10"
},
{
"id": "2002",
"name": "小红",
"tag": "10"
},
{
"id": "2003",
"name": "小蓝",
"tag": "10"
}
]
}