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

运行结果

相关推荐
SuperEugene17 分钟前
Vue3 配置驱动弹窗:JSON配置弹窗内容/按钮,避免重复开发弹窗|配置驱动开发实战篇
前端·javascript·vue.js·前端框架·json
五仁火烧2 小时前
前端最常用的两种请求数据格式application/json 和 multipart/form-data 完全解析
前端·javascript·vue.js·json
吹个口哨写代码3 小时前
h5/小程序直接读本地/在线的json文件数据
前端·小程序·json
DevOpenClub14 小时前
文章抽取信息化 JSON API 接口
json
电商API&Tina19 小时前
1688 拍立淘接口(item_search_img)测试与接入实战心得
java·大数据·前端·物联网·oracle·json
ZC跨境爬虫1 天前
海南大学交友平台开发实战 day11(实现性别图标渲染与后端数据关联+Debug复盘)
前端·python·sqlite·html·json
被放养的研究生1 天前
vscode-settings.json
ide·vscode·json
SuperEugene1 天前
Vue3 配置驱动表单:JSON配置+渲染引擎,快速搭建复杂表单|配置驱动开发实战篇
驱动开发·json
敲上瘾1 天前
大模型接入从入门到实战:API/SDK/本地部署/Claude Code 路由全解析
人工智能·深度学习·机器学习·json·aigc·claude
见山是山-见水是水1 天前
鸿蒙flutter第三方库适配 - JSON格式化工具应用
flutter·华为·json·harmonyos