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

运行结果

相关推荐
莫爷1 天前
JSON 进阶技巧:Schema 验证、JSONPath 查询、性能优化
性能优化·json
莫爷1 天前
JSON vs XML vs YAML 深度对比:如何选择合适的数据格式?
xml·前端·json
ZTLJQ1 天前
序列化的艺术:Python JSON处理完全解析
开发语言·python·json
CSharp精选营2 天前
.NET对象转JSON,到底有几种方式?
c#·json·.net·newtonsoft·对象转换·utf8json
淼_@淼2 天前
python-json
前端·python·json
Bear on Toilet2 天前
HTTP + JSON 接口调用清单总结
网络协议·http·json
电商API&Tina3 天前
【电商API接口】开发者一站式电商API接入说明
大数据·数据库·人工智能·云计算·json
消失的旧时光-19433 天前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
ChoSeitaku3 天前
NO.4|protobuf网络版通讯录|httplib|JSON、XML、ProtoBuf对比
xml·json
青衫客363 天前
浅谈 Java 后端对象映射:从 JSON → VO → Entity 的原理与实践
java·json