解决Gson解析json字符串,Integer变为Double类型的问题

直接上代码记录下。我代码里没有Gson包,用的是nacos对Gson的封装,只是包不同,方法都一样


import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.*;import java.util.Map;
import java.lang.reflect.*;
import java.util.*;public class TestJson {static class MapDeserializer implements JsonDeserializer<Map<String, Object>> {@Overridepublic Map<String, Object> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {if (json.isJsonObject()) {JsonObject jsonObject = json.getAsJsonObject();Map<String, Object> map = new HashMap<>();for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {String key = entry.getKey();JsonElement value = entry.getValue();if (value.isJsonPrimitive() && value.getAsJsonPrimitive().isNumber()) {JsonPrimitive primitive = value.getAsJsonPrimitive();if (primitive.isNumber()) {if (primitive.getAsString().contains(".")) {map.put(key, primitive.getAsDouble());} else {map.put(key, primitive.getAsInt());}}} else if (value.isJsonObject()) {map.put(key, deserialize(value, typeOfT, context));} else if (value.isJsonArray()) {map.put(key, processList(value.getAsJsonArray(), context));} else if (value.isJsonNull()) {map.put(key, null);} else {throw new JsonParseException("Unsupported value type: " + value.getClass());}}return map;} else {throw new JsonParseException("Expected JsonObject, but got: " + json.getClass());}}private List<Object> processList(JsonArray array, JsonDeserializationContext context) {List<Object> list = new ArrayList<>();for (JsonElement element : array) {if (element.isJsonPrimitive() && element.getAsJsonPrimitive().isNumber()) {JsonPrimitive primitive = element.getAsJsonPrimitive();if (primitive.isNumber()) {if (primitive.getAsString().contains(".")) {list.add(primitive.getAsDouble());} else {list.add(primitive.getAsInt());}}} else if (element.isJsonObject()) {list.add(deserialize(element, null, context));} else if (element.isJsonArray()) {list.add(processList(element.getAsJsonArray(), context));} else if (element.isJsonNull()) {list.add(null);} else {throw new JsonParseException("Unsupported value type: " + element.getClass());}}return list;}}class BkR<T> {private boolean result;private T data;public boolean isResult() {return result;}public void setResult(boolean result) {this.result = result;}public T getData() {return data;}public void setData(T data) {this.data = data;}}public static void main(String[] args) {String json = "{\"result\": true, \"data\": {\"aaa\":1, \"bbb\":{\"ab\":[{\"a\":1},{\"a\":2}],\"ccc\":{\"bdd\":[111,222,333,444]}}}}";Gson gson = new GsonBuilder().registerTypeAdapter(new TypeToken<Map<String, Object>>() {}.getType(), new MapDeserializer()).create();BkR<Map<String, Object>> bkr = gson.fromJson(json, new TypeToken<BkR<Map<String, Object>>>() {}.getType());System.out.println(bkr);}
}

输出信息:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26899.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.2 多路复用和多路分用

3.2 多路复用和多路分用 多路复用/分用分用如何工作&#xff1f;无连接分用面向连接的分用面向连接的分用&#xff1a;多线程Web服务器 多路复用/分用 分用如何工作&#xff1f; 主机接收到IP数据报(datagram) 每个数据报携带源IP地址、目的IP地址。每个数据报携带一个传输层的…

【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

WPS/Office Excel 方向键无法切换表格

问题&#xff1a;WPS/Office Excel 方向键无法切换表格。 分析&#xff1a;键盘开启了Scroll Lock&#xff0c;导致Excel开启了滚动锁定。滚动锁定如图: 解决&#xff1a;再次按下Scroll Lock键解锁即可。&#xff08;Scroll Lock键在键盘右侧上方。&#xff09;

机器学习 day26(多标签分类,Adam算法,卷积层)

多标签分类 多标签分类&#xff1a;对于单个输入特征&#xff0c;输出多个不同的标签y多类分类&#xff1a;对于单个输入特征&#xff0c;输出单个标签y&#xff0c;但y的可能结果有多个 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测三个不…

virtuoso culculator 绘制VCO 幅度频率曲线

virtuoso culculator 绘制VCO 幅度频率曲线 环境tran分析得到波形culculator编辑参数扫描 环境 IC618 TSMC65nm tran分析得到波形 culculator编辑 参数扫描 运行完后输出F-V曲线

怎么制作思维导图简单又漂亮?看看这几款常用模板

怎么制作思维导图简单又漂亮&#xff1f;制作思维导图可以帮助我们更好地梳理思路、整理信息。它可以让我们将复杂的信息变得易于理解和记忆&#xff0c;并且可以帮助我们更好地组织各种想法和概念。通过制作思维导图&#xff0c;我们可以更清晰地看到问题的本质&#xff0c;找…

手动实现 Tomcat 底层机制+ 自己设Servlet 问题分析

文章目录 手动实现 Tomcat 底层机制 自己设Servlet问题分析完成小案例运行效果 此项目用maven至于怎么配置在下一篇文章创建cal.htmlCalServlet.java# 实现步骤 web.xmlWebUtils 问题:Tomcat 整体架构分析测试分析&#xff1a;抓包情况 手动实现 Tomcat 底层机制 自己设Servlet…

《微服务架构设计模式》第十二章 部署微服务应用

内容总结自《微服务架构设计模式》 部署微服务应用 一、部署模式分类二、编程语言特定的发布包格式1、概述2、利弊 三、将服务部署为虚拟机1、概览2、利弊 四、将服务部署为容器1、概述2、利弊3、K8S部署 五、Serverless部署1、概述2、利弊3、示例 六、总结 一、部署模式分类 …

Spring初识(二)

前言 经过前面的学习,我们已经知道spring就是包含了众多方法的Ioc,那么既然是容器,就具备两个功能,我们接下来就是要介绍以下两个功能: 1.将对象存储到容器(spring)中: 2.从容器(spring)中将对象取出来. 这两个功能就应发出来,spring的创建和使用. 一.Spring创建 我们先来说…

导出python环境的所有安装包

导出操作 pip freeze > requests.txt批量导入操作 pip install -r requests.txt

Unity Arduino 串口通信

一、Unity端发送消息&#xff0c;Arduino端接收消息 通过串口通信 Arduino端 #include <Arduino.h>#define PIN_KEY 5 uint item;void setup() {item 0;Serial.begin(115200);pinMode(PIN_KEY, OUTPUT); }void loop() {if(Serial.available()>0){item Serial.rea…

【统计函数3】——excel常见函数

相关数据资料来源于网易 函数一览&#xff1a; rank、rand、randbetween、floor、int rank函数: 求某单元格在某区域内的排名 RANK(数值,引用区域,降序0/升序1)范围多指定&#xff1a; 分开的范围之间可用逗号隔开&#xff0c;最后再用一个小括号括起来。F4可以快速锁定行和列。…