当前位置: 首页 > news >正文

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

在这里插入图片描述

运行结果

在这里插入图片描述

相关文章:

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

需求 通过Gson&#xff0c;将JSON字符串&#xff0c;解析为复杂类型。 比如&#xff0c;解析成如下类型&#xff1a; Map<String, List<Bean>> 依赖&#xff08;Gson&#xff09; <dependency><groupId>com.google.code.gson</groupId><art…...

伪彩色处理及算法

伪色彩(false color)是指将真实世界的中无法被肉眼观察到的色彩通过计算机或其他技术转换为可见光,从而使人们能够看到这些原本无法看到的色彩。这种技术被广泛应用于军事、医学、科研等领域。 在医学领域,伪色彩技术被用于医学影像诊断。例如,通过将不同灰度的图像映射到…...

Gradle-02:问题Plugin with id ‘maven‘ not found

1. 背景 在一次使用 Gradle 构建自己项目&#xff0c;完事&#xff0c;需要上传到本地 Maven 仓库&#xff0c;因为事先并不清楚 apply plugin: maven 插件已经被 Gradle 移除&#xff0c;找了一圈&#xff0c;才找到解决方案。 2. 原因 apply plugin: maven def localRepo f…...

jupyter lab环境配置

1.jupyterlab 使用虚拟环境 conda install ipykernelpython -m ipykernel install --user --name tf --display-name "tf" #例&#xff1a;环境名称tf2. jupyter lab kernel管理 show kernel list jupyter kernelspec listremove kernel jupyter kernelspec re…...

Unity Sort Group(排序组)

** Unity 中的Sort Group组组件允许让Sprite Renderer(精灵渲染器)重新决定渲染顺序. ** 作为组件存在 组件内容&#xff1a; Unity 使用Sort Group 组件的Sort layer 和Order in layer的值来确定排序组在渲染队列内相对与场景内其他排序组和游戏对象的优先级。 属性功能So…...

基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

总线锁 总线锁就是使用处理器提供的一个LOCK#信号&#xff0c;当一个处理器在总线上输出此信号时&#xff0c;其他处理器的请求将被阻塞住&#xff0c;那么该处理器可以独占共享内存。 CPU和内存之间的通信被锁&#xff01;&#xff01; 如果多个处理器同时对共享变量进行读写…...

MybatisPlus存在 sql 注入漏洞(CVE-2023-25330)解决办法

首先我们了解下这个漏洞是什么&#xff1f; MyBatis-Plus TenantPlugin 是 MyBatis-Plus 的一个为多租户场景而设计的插件&#xff0c;可以在 SQL 中自动添加租户 ID 来实现数据隔离功能。 MyBatis-Plus TenantPlugin 3.5.3.1及之前版本由于 TenantHandler#getTenantId 方法在…...

【java】使用maven完成一个servlet项目

一、创建项目 创建一个maven项目 maven是一个管理java项目的工具&#xff0c;根据maven的pom.xml可以引入各种依赖&#xff0c;插件。 步骤 打开idea&#xff0c;点击新建项目 点击创建项目&#xff0c;项目创建就完成了 进入时会自动打开pom.xml文件。 pom是项目的配置文件…...

前端Vue入门-day07-Vuex入门

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 自定义创建项目 vuex概述 构建 vuex [多组件数据共享] 环境 创建一个空仓库 state 状态 1. 提供数据&…...

2023再谈前端状态管理

目录 什么是状态管理&#xff1f; 状态 常见模式 要解决的问题 心智模型 React Context Context 的问题 优点 缺点 React 外部状态管理库 概览 Class 时代 Redux 单向数据流 三大原则 如何处理异步 如何处理数据间联动 优点 缺点 Dva icestore Mobx 设…...

ffmpeg SDL播放器--播放udp组播流

c调用ffmpeg api及SDL库播放播放udp组播流。 代码及工程见https://download.csdn.net/download/daqinzl/88168574 参考文档&#xff1a;https://blog.csdn.net/a53818742/article/details/109312740 开发工具&#xff1a;visual studio 2019 记得推送udp流&#xff0c;可采…...

__attribute__((noreturn))

GNU C 的一大特色就是__attribute__ 机制&#xff0c;__attribute__ 可以设置函数属性&#xff08;Function Attribute&#xff09;、变量属性&#xff08;Variable Attribute&#xff09;和类型属性&#xff08;Type Attribute&#xff09;。 语法格式为: __attribute__((att…...

遮挡边界处的深度补全和双曲面外推

论文地址&#xff1a;Depth Completion with Twin Surface Extrapolation at Occlusion Boundaries 论文代码&#xff1a;https://github.com/imransai/TWISE 深度补全是从稀疏的已知深度值开始&#xff0c;为其余图像像素估计未知深度。 大多数方法将其建模为深度插值&#x…...

LK-99室温超导激发万万亿市场,将对我们的生活产生哪些影响?

7月下旬&#xff0c;韩国量子能源研究中心公司相关研究团队在预印本网站上陆续公布两篇类似的论文&#xff0c;宣称一种命名为LK-99的铜掺杂铅磷灰石材料拥有“室温常压”超导能力&#xff0c;系全世界首款室温常压超导材料。 它们的实验方法比较简单&#xff0c;就是把铅、铜、…...

子集——力扣78

文章目录 题目描述法一 迭代法实现子集枚举题目描述 法一 迭代法实现子集枚举 class Solution {public:vector<int> t;vector<vector<...

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(8 月 2 日论文合集)

文章目录 一、检测相关(8篇)1.1 Explainable Cost-Sensitive Deep Neural Networks for Brain Tumor Detection from Brain MRI Images considering Data Imbalance1.2 MonoNext: A 3D Monocular Object Detection with ConvNext1.3 Detecting Cloud Presence in Satellite Ima…...

JDK中「SPI」原理分析

基于【JDK1.8】 一、SPI简介 1、概念 SPI即service-provider-interface的简写&#xff1b; JDK内置的服务提供加载机制&#xff0c;可以为服务接口加载实现类&#xff0c;解耦是其核心思想&#xff0c;也是很多框架和组件的常用手段&#xff1b; 2、入门案例 2.1 定义接口 …...

DSL:数字用户线路(Digital Subscriber Line)

一、基础释义 DSL&#xff08;数字用户线路&#xff0c;Digital Subscriber Line&#xff09;是一种用于传输数字数据的通信技术&#xff0c;允许数据在传统的电话线路&#xff08;铜线&#xff09;上进行高速传输。DSL技术通过将高频信号叠加在低频的语音信号上&#xff0c;使…...

Java集合ArrayList详解

ArrayList 类是一个可以动态修改的数组&#xff0c;与普通数组的区别就是它是没有固定大小的限制&#xff0c;我们可以添加或删除元素。 ArrayList 继承了 AbstractList &#xff0c;并实现了 List 接口。 Java 数组 与 ArrayList 在Java中&#xff0c;我们需要先声明数组的大…...

React Dva项目 Model中编写与调用异步函数

上文 React Dva项目中模仿网络请求数据方法 中&#xff0c;我们用项目方法模拟了后端请求的数据 那么 今天我们就在models中尝试去使用一下这种异步获取数据的方法 之前 我们在文章 React Dva项目创建Model,并演示数据管理与函数调用 中已经接触过Model了 也可以理解为 它就是 …...

解构TurboWarp Packager:现代Web应用打包技术的架构演进与安全范式转移

解构TurboWarp Packager&#xff1a;现代Web应用打包技术的架构演进与安全范式转移 【免费下载链接】packager Converts Scratch projects into HTML files, zip archives, or executable programs for Windows, macOS, and Linux. 项目地址: https://gitcode.com/gh_mirrors…...

基于springboot+vue道路救援计费系统hx1046ZG

文章目录详细视频演示技术介绍功能介绍核心代码系统效果图源码获取详细视频演示 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 技术介绍 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomca…...

Altium Designer实战:5分钟搞定大电流走线开窗,从动态Polygon到阻焊层Region的完整操作流

Altium Designer大电流走线开窗实战&#xff1a;从动态铺铜到阻焊层的精准转换 在高速PCB设计中&#xff0c;大电流路径的处理往往成为工程师的痛点。当电路需要承载5A甚至10A以上电流时&#xff0c;常规走线宽度可能无法满足载流需求&#xff0c;此时走线开窗技术便成为提升电…...

利用快马平台快速构建harness engineering风格的CI/CD监控原型

最近在尝试构建一个符合harness engineering理念的CI/CD监控面板&#xff0c;发现用InsCode(快马)平台可以快速实现原型验证&#xff0c;整个过程比想象中顺畅很多。这里记录下我的实现思路和关键步骤&#xff0c;给有类似需求的开发者参考。 原型设计思路 harness engineering…...

测试豆包的图像处理功能

01 【豆包图像处理功能】一、人物抠图这里测试一下豆包图像处理的功能&#xff0c; 首先呢我们先截取一张网络的图片 让豆包将其中的人物图像抠图出来&#xff0c; 将图片贴入豆包的输入窗口&#xff0c; 要求抠出图片的背景为白色&#xff0c; 并调整为16:9的比例&#x…...

开发提效利器:基于快马平台构建可复用的mcp工具连接池

最近在开发AI应用时&#xff0c;经常需要连接各种外部服务&#xff0c;每次都要重复写一堆适配代码&#xff0c;特别浪费时间。后来发现用MCP协议统一管理这些连接可以大幅提升效率&#xff0c;于是在InsCode(快马)平台上搭建了一个可复用的MCP工具连接池模板&#xff0c;现在分…...

Flutter微信集成实战指南:从问题解决到价值实现

Flutter微信集成实战指南&#xff1a;从问题解决到价值实现 【免费下载链接】fluwx Flutter版微信SDK.WeChat SDK for flutter. 项目地址: https://gitcode.com/gh_mirrors/fl/fluwx 微信生态集成是Flutter应用开发中的常见需求&#xff0c;但多平台适配、功能实现复杂度…...

告别重复编码:用claudecode在快马上批量生成高效工具函数

作为一名前端开发者&#xff0c;每天都要和各种各样的工具函数打交道。格式化日期、深拷贝对象、防抖节流……这些看似简单的功能&#xff0c;却要反复编写和调试。最近我发现了一个超级高效的工作流&#xff0c;用InsCode(快马)平台结合claudecode&#xff0c;可以一键生成这些…...

从零开始高效设计专业字体:FontForge实用指南

从零开始高效设计专业字体&#xff1a;FontForge实用指南 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 你是否曾为找不到完美匹配设计需求的字体而苦恼&#xff1f…...

Obsidian图片本地化终极指南:3步打造永不失效的笔记图片库

Obsidian图片本地化终极指南&#xff1a;3步打造永不失效的笔记图片库 【免费下载链接】obsidian-local-images-plus This repo is a reincarnation of obsidian-local-images plugin which main aim was downloading images in md notes to local storage. 项目地址: https:…...