解决Gson将长数字( json字符串)转换为科学记数法格式
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。

依赖
Gradle:
dependencies {implementation 'com.google.code.gson:gson:2.11.0'
}
Maven:
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.11.0</version>
</dependency>
我们有的项目中是使用gson解析网络请求返回数据。JSON转Java对象:使用fromJson(String json, Class classOfT)方法将JSON字符串转换为指定的Java对象类型。
代码:
public static void main(String[] args) {Gson gson = new Gson();String json = "{\"id\":246989989011,\"algItemCode\":\"北京\",\"city\":\"北京\",\"platform\":\"web\"}";
// Type type = new TypeToken<Response<ReportTwoDto>>() {
// }.getType();Map jsonString = gson.fromJson(json, Map.class);// 输出JSON字符串System.out.println("Serialized JSON: " + jsonString);}
}
以上代码会出现:
类似:{id=2.46989989011E11, algItemCode=北京, city=北京, platform=web} ID为科学计数法的数据。
Gson为什么使用科学计数法
因为JSON规范中规定,数字必须以十进制格式表示。然而,当一个数字非常大或非常小时,直接使用普通的十进制表示可能会导致精度丢失或者无法表示。为了解决这个问题,JSON规范允许使用科学计数法来表示这些数字。
在Java中,当一个整数超过Integer.MAX_VALUE(2^31-1)时,它会自动转换为Long类型。同样,当一个浮点数超过Float.MAX_VALUE(大约为1.7E308)时,它会自动转换为Double类型。因此,当我们使用Gson将Java对象序列化为JSON字符串时,如果遇到非常大的数字,Gson会将其转换为科学计数法表示的字符串。
问题解决
- 转换时指定转换类,不要为map.
public static void main(String[] args) {Gson gson = new Gson();String json = "{\"id\":246989989011,\"algItemCode\":\"北京\",\"city\":\"北京\",\"platform\":\"web\"}";ReportTwoDto jsonString = gson.fromJson(json, ReportTwoDto.class);// 输出JSON字符串System.out.println("Serialized JSON: " + jsonString);}
输出:ReportTwoDto(id=246989989011, algItemCode=北京)
TypeToken是一种用于在Java中解决泛型类型擦除问题的工具,它通过反射机制获取泛型参数的具体类型,从而支持在运行时进行泛型类型的操作。
TypeToken通过匿名内部类的使用来保留泛型信息。具体来说,当创建一个TypeToken实例时,会生成一个匿名内部类,这个匿名类包含了泛型参数的实际类型信息。
public static void main(String[] args) {Gson gson = new Gson();String json = "{\"data\":{\"id\":246989989011,\"algItemCode\":\"北京\",\"city\":\"北京\",\"platform\":\"web\"}}";Type type = new TypeToken<Response<ReportTwoDto>>() {}.getType();Response<ReportTwoDto> jsonString = gson.fromJson(json, type);// 输出JSON字符串System.out.println("Serialized JSON: " + jsonString.data);}
也能输出:
Serialized JSON: ReportTwoDto(id=246989989011, algItemCode=北京)
Gson的TypeToken是一种强大的工具,通过在运行时保留泛型信息,解决了Java泛型类型擦除的问题。它在处理复杂JSON结构和泛型类型时非常有用,广泛应用于各种需要序列化和反序列化的场景中。
2. 使用工具类转换:
public static void main(String[] args) {Gson gson = new Gson();String json = "{\"id\":246989989011,\"algItemCode\":\"北京\",\"city\":\"北京\",\"platform\":\"web\"}";Map jsonString = gson.fromJson(json, Map.class);ReportTwoDto bean = BeanUtil.toBean(jsonString, ReportTwoDto.class);// 输出JSON字符串System.out.println("Serialized JSON: " + bean);}
其他工具替代
如果项目中对数字格式有严格要求,且不能接受科学计数法的表示方式,也可以考虑使用其他序列化工具,如FastJson等,这些工具可能提供了更多的控制选项来满足特定的需求。Gson使用科学计数法主要是出于优化存储空间和提高解析效率的考虑,但在某些情况下,这可能会导致不符合预期的结果。因此,了解如何调整Gson的行为或选择其他工具来满足特定需求是非常重要的。
相关文章:
解决Gson将长数字( json字符串)转换为科学记数法格式
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。 依赖 Gradle: dependencies {implementation com.google.code.gson:gson:2.11.0 }…...
php环境搭建教程
PHP环境搭建教程 在构建和开发PHP应用程序时,搭建一个稳定、高效的PHP环境是基础且关键的一步。本教程将详细介绍如何在不同操作系统(Windows和Linux)上搭建PHP环境,包括Apache服务器的安装与配置、PHP的安装与配置、MySQL的安装…...
测试ASP.NET Core的WebApi项目调用WebService
虚拟机中部署的匿名访问的WebService,支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。 VS2022创建WebApi项目,然后在解决方案资源管理器的Connected Services节点点右键,选择管理连接的服务菜单。 点击下图圈红处…...
【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)
看到这句话的时候证明:此刻你我都在努力 加油陌生人 个人主页:Gu Gu Study 专栏:用Java学习数据结构系列 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者ÿ…...
快手视频怎么保存到相册?(详细操作)
随着短视频的流行,快手已经成为越来越多人日常生活的一部分。无论是搞笑片段、旅行记录,还是生活点滴,用户们每天都会在快手上浏览到大量有趣的视频。有时候,我们会遇到特别想保存的视频,想要分享到朋友圈,…...
为什么 ECB 模式不安全
我们先来简单了解下 ECB 模式是如何工作的 ECB 模式不涉及链接模式,所以也就用不着初始化向量,那么相同的明文分组就会被加密成相同的密文分组,而且每个分组运算都是独立的,这也就意味着可以并行提高运算效率,但也正是…...
『功能项目』事件中心处理怪物死亡【55】
本章项目成果展示 我们打开上一篇54回调函数处理死亡的项目, 本章要做的事情是用事件中心处理怪物死亡后的逻辑 首先打开之前事件中心脚本(不做更改,调用即可): using System.Collections.Generic; using UnityEngine…...
一个安卓鸿蒙化工具
DevEco插件,为已有安卓项目鸿蒙化加速。 目前支持: 1、安卓Vector Assets转svg; 2、json转ets model; 3、kotlin model转ets model; 下载地址:andtoharplugin1.1.0 安装: deveco插件安装选硬…...
PyQt5库学习之QFileDialog.getExistingDirectory函数
PyQt5库学习之QFileDialog.getExistingDirectory函数 一、简介 QFileDialog.getExistingDirectory 是 PyQt5 中的一个函数,它提供了一个标准的目录选择对话框,允许用户选择一个已存在的目录。这个函数是 QFileDialog 类的一部分,通常用于打开…...
AUTOSAR_EXP_ARAComAPI的5章笔记(9)
☞ 返回总目录 5.4 骨架类(Skeleton Class) 骨架类是由AUTOSAR 元模型的服务接口描述(SI description)生成的。ara::com对生成的骨架类的接口进行了标准化。自适应平台(AP)产品供应商的工具链将生成一个完…...
京东-第2题-撞车
Powered by:NEFU AB-IN Link 文章目录 京东-第2题-撞车题意思路代码 京东-第2题-撞车 题意 一条单向单车道的道路上有n辆车,第i辆车位于 xi;,速度大小为 vi。 显然,如果车辆保持此速度行驶下去,在大多数情况下都会发生碰撞。 现…...
Vue3流程图插件-Vue Flow
1、安装:通过 npm 或 yarn 安装 Vue Flow。 npm install vueflow/core# 或者yarn add vueflow/core 2、引入:在你的 Vue 3 项目中引入 Vue Flow。 import { VueFlow, Background, Controls, MiniMap } from vueflow/core;3、使用:在 Vue…...
初始网络编程(下)
所属专栏:Java学习 1. TCP 的简单示例 同时,由于 TCP 是面向字节流的传输,所以说传输的基本单位是字节,接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口(创建时绑定的端口&…...
java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频)
这是什么系统? 资源获取方式在最下方 java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频) 土地档案管理系统是一种将传统纸质档案进行数字化管理的软件。通过该系统,用户能够高效地进行土地档案的存储、查阅、修改和删除等操作…...
第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作
宿主机的VM安装CENTOS文件无法快速上传,也不方便输入命令行,用SSH终端xshell连接虚拟机的SSH工具就方便多了,实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…...
Spring:统一结果私有属性造成的前端无法访问异常报错问题
用户未填写任何评价 1.问题复现 (1)看一段代码 controller: import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…...
thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)
thinkphp 做分布式服务读写分离分库分表(分区) 引言 thinkphp* 大道至简一、分库分表分表php 分库分表hash算法0、分表的方法(thinkphp)1、ThinkPHP6 业务分表之一:UID 发号器2、ThinkPHP6 业务分表之二:用…...
webpack的使用
将js读取的目录改成读内存中的main.js,否则不会生效 为了 将index.html在打开首页的时候就能自动显示,就需要引入插件 指定开发环境运行的命令: dev:开发环境,build生产环境...
MATLAB智能优化算法-学习笔记(3)——大规模邻域搜索算法求解旅行商问题【过程+代码】
一、问题描述 旅行商问题(TSP, Traveling Salesman Problem)是组合优化中的经典问题之一。给定一组城市和每对城市之间的距离,要求找到一条最短的路径,使旅行商从某个城市出发,访问每个城市一次并最终回到出发点。TSP问题广泛应用于物流配送、工厂调度、芯片制造等领域。…...
货币单位换算 - 华为OD统一考试(E卷)
2024华为OD机试(E卷D卷)最新题库【超值优惠】Java/Python/C合集 题目描述 记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。 每行记录一条金额,金额带有货币单位,格式为数字单位&…...
Visual Paradigm 17.0 团队协作新功能实测:手把手教你用项目模板和文件夹管理提效
Visual Paradigm 17.0 团队协作实战指南:从模板配置到文件夹管理的高效工作流在敏捷开发团队中,项目启动速度和资产管理的规范性往往直接影响整体效率。Visual Paradigm 17.0针对这一痛点推出的团队协作增强功能,特别是服务器端项目模板和文件…...
【UniApp小程序开发】解决无法使用Vue自定义指令的完美替代方案:权限组件封装
在 UniApp 开发中,你是否遇到过这样的困惑:明明在 Vue Web 项目中用得顺手的 v-permission 自定义指令,一到小程序端就完全失效?本文将深入剖析其原因,并提供一套可直接复用的组件化解决方案,让你在小程序中…...
使用TaotokenCLI工具一键配置开发环境中的API密钥
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中,为每个项目或成员手动配置大模型API密钥和…...
METSO A413248自动化系统
METSO A413248 自动化系统模块产品特点: 品牌归属:芬兰METSO(美卓)工业自动化系统原装备件。 产品类型:工业级自动化控制模块/接口模块。 核心功能:用于控制信号处理、数据采集及系统集成。 系统兼容&am…...
WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南
WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经典即时战…...
广州因特智能:AI视觉软硬结合,打破半导体检测装备“卡脖子”困境
【导语:广州因特智能科技孵化于西安电子科技大学广州研究院,专注用AI视觉技术解决工业场景的“卡脖子”检测难题,为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化,构建完整能力体系广州因特智能科技由西安电子…...
Burp Suite拦截与替换机制深度解析:从协议层到规则链
1. 这不是“点开就能用”的功能,而是你和目标系统之间的一道可编程闸门很多人第一次在Burp Suite里点开Proxy → Intercept,看到HTTP请求被拦下来,兴奋地改个User-Agent、删个Cookie就点Forward,以为自己已经掌握了“拦截与替换”…...
Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例
Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例 想象一下,医生通过CT扫描将人体内部结构分层呈现,而GIS中的"渔网"工具同样能对城市路网进行"切片式"分析。这种空间离散化技术&…...
什么情况下会核销贷款
贷款核销的核心前提是:贷款被认定为 “损失类” 且经 “穷尽追偿” 仍无法收回,银行按监管与会计规则从账面冲销,但债权不消灭、仍可追偿。一、核心认定条件(满足其一即可)破产 / 注销 / 吊销:借款人和担保…...
03 - 变量与数据类型
03 - 变量与数据类型 变量是编程里最基础的概念,相当于你往电脑里存东西的"容器"。这章我们把变量的命名规则、Python 的几种基本数据类型都过一遍。 变量是什么 说白了,变量就是一个有名字的盒子。你往里面放个东西,以后想用这个…...
