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

运行结果

相关推荐
一颗小行星-9 小时前
为什么有的JSON可以带注释?
json
CedarQR1 天前
万字长文:从零在 RK3588 上部署 PaddleSpeech 中文 TTS 全流程(FastSpeech2 + HiFiGAN)
开发语言·c++·嵌入式硬件·ubuntu·json
Geoking.2 天前
JSON vs JSONL:从数据格式到 AI Agent 的工程实践
人工智能·深度学习·json
ID_180079054732 天前
京东商品详情API能力解析与标准化应用方案(含JSON返回示例)
json
灯澜忆梦3 天前
Go 语言 _JSON---序列化与反序列化
开发语言·golang·json
梦幻通灵4 天前
Notepad++格式化Json两种方案【持续更新】
android·json·notepad++
解局易否结局4 天前
鸿蒙原生开发实战|Native JSON 编解码与高性能数据序列化
华为·json·harmonyos
代码的小搬运工5 天前
网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
网络·数据库·json
2601_960906725 天前
网络防御等最先进AI模型领域
人工智能·json·hbase·flume·storm
前网易架构师-高司机6 天前
带标注的山体滑坡塌方数据集数据集,识别率78.1%,974张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·自然灾害·山体滑坡