Gson:解析JSON为复杂对象:TypeToken

需求

通过Gson,将JSON字符串,解析为复杂类型。

比如,解析成如下类型:

Map<String, List<Bean>>

依赖(Gson)

xml 复制代码
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
		</dependency>

解决方案

使用 TypeToken 来定义复杂类型。

java 复制代码
Type type = new TypeToken<复杂类型>() {}.getType();

代码示例

测试

java 复制代码
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);

	}
}

数据类

java 复制代码
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 ,内容如下:

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"
		}
	]
}

运行结果

相关推荐
最笨的羊羊6 小时前
Flink CDC系列之:JSON 序列化器JsonRowDataSerializationSchemaUtils
json·flink cdc系列·serialization·json 序列化器·rowdata·schemautils
q***498610 小时前
SpringCloud系列教程:微服务的未来 (五)枚举处理器、JSON处理器、分页插件实现
spring cloud·微服务·json
愤怒的山羊1 天前
jetcache List 缓存, json 序列化 泛型解析成了 JsonObject 处理
缓存·json·list
2***d8851 天前
使用 MySQL 从 JSON 字符串提取数据
mysql·oracle·json
TDengine (老段)2 天前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
wow_DG2 天前
【Python✨】VS Code 秒开 Python 类型检查:一招 mypy + settings.json 让你的 Bug 原地现形!
python·json·bug
会篮球的程序猿3 天前
html+canvas+thikphp 可视化工具拖拽、编辑生成JSON,渲染成海报图片 完全自定义,支持选择,文字背景色
前端·html·json
倚肆3 天前
Hutool-json 库完整指南
java·json
q***23924 天前
MySQL JSON数据类型全解析(JSON datatype and functions)
android·mysql·json
i_am_a_div_日积月累_5 天前
JSON数据转Excel
json·excel·css3