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

解决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会将其转换为科学计数法表示的字符串。

问题解决

  1. 转换时指定转换类,不要为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&#xff08;又称Google Gson&#xff09;是Google公司发布的一个开放源代码的Java库&#xff0c;主要用途为序列化Java对象为JSON字符串&#xff0c;或反序列化JSON字符串成Java对象。 依赖 Gradle: dependencies {implementation com.google.code.gson:gson:2.11.0 }…...

php环境搭建教程

PHP环境搭建教程 在构建和开发PHP应用程序时&#xff0c;搭建一个稳定、高效的PHP环境是基础且关键的一步。本教程将详细介绍如何在不同操作系统&#xff08;Windows和Linux&#xff09;上搭建PHP环境&#xff0c;包括Apache服务器的安装与配置、PHP的安装与配置、MySQL的安装…...

测试ASP.NET Core的WebApi项目调用WebService

虚拟机中部署的匿名访问的WebService&#xff0c;支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。   VS2022创建WebApi项目&#xff0c;然后在解决方案资源管理器的Connected Services节点点右键&#xff0c;选择管理连接的服务菜单。 点击下图圈红处…...

【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study 专栏&#xff1a;用Java学习数据结构系列 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…...

快手视频怎么保存到相册?(详细操作)

随着短视频的流行&#xff0c;快手已经成为越来越多人日常生活的一部分。无论是搞笑片段、旅行记录&#xff0c;还是生活点滴&#xff0c;用户们每天都会在快手上浏览到大量有趣的视频。有时候&#xff0c;我们会遇到特别想保存的视频&#xff0c;想要分享到朋友圈&#xff0c;…...

为什么 ECB 模式不安全

我们先来简单了解下 ECB 模式是如何工作的 ECB 模式不涉及链接模式&#xff0c;所以也就用不着初始化向量&#xff0c;那么相同的明文分组就会被加密成相同的密文分组&#xff0c;而且每个分组运算都是独立的&#xff0c;这也就意味着可以并行提高运算效率&#xff0c;但也正是…...

『功能项目』事件中心处理怪物死亡【55】

本章项目成果展示 我们打开上一篇54回调函数处理死亡的项目&#xff0c; 本章要做的事情是用事件中心处理怪物死亡后的逻辑 首先打开之前事件中心脚本&#xff08;不做更改&#xff0c;调用即可&#xff09;&#xff1a; using System.Collections.Generic; using UnityEngine…...

一个安卓鸿蒙化工具

DevEco插件&#xff0c;为已有安卓项目鸿蒙化加速。 目前支持&#xff1a; 1、安卓Vector Assets转svg&#xff1b; 2、json转ets model&#xff1b; 3、kotlin model转ets model&#xff1b; 下载地址&#xff1a;andtoharplugin1.1.0 安装&#xff1a; deveco插件安装选硬…...

PyQt5库学习之QFileDialog.getExistingDirectory函数

PyQt5库学习之QFileDialog.getExistingDirectory函数 一、简介 QFileDialog.getExistingDirectory 是 PyQt5 中的一个函数&#xff0c;它提供了一个标准的目录选择对话框&#xff0c;允许用户选择一个已存在的目录。这个函数是 QFileDialog 类的一部分&#xff0c;通常用于打开…...

AUTOSAR_EXP_ARAComAPI的5章笔记(9)

☞ 返回总目录 5.4 骨架类&#xff08;Skeleton Class&#xff09; 骨架类是由AUTOSAR 元模型的服务接口描述&#xff08;SI description&#xff09;生成的。ara::com对生成的骨架类的接口进行了标准化。自适应平台&#xff08;AP&#xff09;产品供应商的工具链将生成一个完…...

京东-第2题-撞车

Powered by:NEFU AB-IN Link 文章目录 京东-第2题-撞车题意思路代码 京东-第2题-撞车 题意 一条单向单车道的道路上有n辆车&#xff0c;第i辆车位于 xi;&#xff0c;速度大小为 vi。 显然&#xff0c;如果车辆保持此速度行驶下去&#xff0c;在大多数情况下都会发生碰撞。 现…...

Vue3流程图插件-Vue Flow

1、安装&#xff1a;通过 npm 或 yarn 安装 Vue Flow。 npm install vueflow/core# 或者yarn add vueflow/core 2、引入&#xff1a;在你的 Vue 3 项目中引入 Vue Flow。 import { VueFlow, Background, Controls, MiniMap } from vueflow/core;3、使用&#xff1a;在 Vue…...

初始网络编程(下)

所属专栏&#xff1a;Java学习 1. TCP 的简单示例 同时&#xff0c;由于 TCP 是面向字节流的传输&#xff0c;所以说传输的基本单位是字节&#xff0c;接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口&#xff08;创建时绑定的端口&…...

java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式在最下方 java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频) 土地档案管理系统是一种将传统纸质档案进行数字化管理的软件。通过该系统&#xff0c;用户能够高效地进行土地档案的存储、查阅、修改和删除等操作…...

第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作

宿主机的VM安装CENTOS文件无法快速上传&#xff0c;也不方便输入命令行&#xff0c;用SSH终端xshell连接虚拟机的SSH工具就方便多了&#xff0c;实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…...

Spring:统一结果私有属性造成的前端无法访问异常报错问题

用户未填写任何评价 1.问题复现 &#xff08;1&#xff09;看一段代码 controller&#xff1a; import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…...

thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)

thinkphp 做分布式服务读写分离分库分表&#xff08;分区&#xff09; 引言 thinkphp* 大道至简一、分库分表分表php 分库分表hash算法0、分表的方法&#xff08;thinkphp&#xff09;1、ThinkPHP6 业务分表之一&#xff1a;UID 发号器2、ThinkPHP6 业务分表之二&#xff1a;用…...

webpack的使用

将js读取的目录改成读内存中的main.js&#xff0c;否则不会生效 为了 将index.html在打开首页的时候就能自动显示&#xff0c;就需要引入插件 指定开发环境运行的命令&#xff1a; dev&#xff1a;开发环境&#xff0c;build生产环境...

MATLAB智能优化算法-学习笔记(3)——大规模邻域搜索算法求解旅行商问题【过程+代码】

一、问题描述 旅行商问题(TSP, Traveling Salesman Problem)是组合优化中的经典问题之一。给定一组城市和每对城市之间的距离,要求找到一条最短的路径,使旅行商从某个城市出发,访问每个城市一次并最终回到出发点。TSP问题广泛应用于物流配送、工厂调度、芯片制造等领域。…...

货币单位换算 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 记账本上记录了若干条多国货币金额&#xff0c;需要转换成人民币分(fen)&#xff0c;汇总后输出。 每行记录一条金额&#xff0c;金额带有货币单位&#xff0c;格式为数字单位&…...

Visual Paradigm 17.0 团队协作新功能实测:手把手教你用项目模板和文件夹管理提效

Visual Paradigm 17.0 团队协作实战指南&#xff1a;从模板配置到文件夹管理的高效工作流在敏捷开发团队中&#xff0c;项目启动速度和资产管理的规范性往往直接影响整体效率。Visual Paradigm 17.0针对这一痛点推出的团队协作增强功能&#xff0c;特别是服务器端项目模板和文件…...

【UniApp小程序开发】解决无法使用Vue自定义指令的完美替代方案:权限组件封装

在 UniApp 开发中&#xff0c;你是否遇到过这样的困惑&#xff1a;明明在 Vue Web 项目中用得顺手的 v-permission 自定义指令&#xff0c;一到小程序端就完全失效&#xff1f;本文将深入剖析其原因&#xff0c;并提供一套可直接复用的组件化解决方案&#xff0c;让你在小程序中…...

使用TaotokenCLI工具一键配置开发环境中的API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中&#xff0c;为每个项目或成员手动配置大模型API密钥和…...

METSO A413248自动化系统

METSO A413248 自动化系统模块产品特点&#xff1a; 品牌归属&#xff1a;芬兰METSO&#xff08;美卓&#xff09;工业自动化系统原装备件。 产品类型&#xff1a;工业级自动化控制模块/接口模块。 核心功能&#xff1a;用于控制信号处理、数据采集及系统集成。 系统兼容&am…...

WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南

WarcraftHelper&#xff1a;魔兽争霸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视觉软硬结合,打破半导体检测装备“卡脖子”困境

【导语&#xff1a;广州因特智能科技孵化于西安电子科技大学广州研究院&#xff0c;专注用AI视觉技术解决工业场景的“卡脖子”检测难题&#xff0c;为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化&#xff0c;构建完整能力体系广州因特智能科技由西安电子…...

Burp Suite拦截与替换机制深度解析:从协议层到规则链

1. 这不是“点开就能用”的功能&#xff0c;而是你和目标系统之间的一道可编程闸门很多人第一次在Burp Suite里点开Proxy → Intercept&#xff0c;看到HTTP请求被拦下来&#xff0c;兴奋地改个User-Agent、删个Cookie就点Forward&#xff0c;以为自己已经掌握了“拦截与替换”…...

Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例

Arcmap实操&#xff1a;如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例 想象一下&#xff0c;医生通过CT扫描将人体内部结构分层呈现&#xff0c;而GIS中的"渔网"工具同样能对城市路网进行"切片式"分析。这种空间离散化技术&…...

什么情况下会核销贷款

贷款核销的核心前提是&#xff1a;贷款被认定为 “损失类” 且经 “穷尽追偿” 仍无法收回&#xff0c;银行按监管与会计规则从账面冲销&#xff0c;但债权不消灭、仍可追偿。一、核心认定条件&#xff08;满足其一即可&#xff09;破产 / 注销 / 吊销&#xff1a;借款人和担保…...

03 - 变量与数据类型

03 - 变量与数据类型 变量是编程里最基础的概念&#xff0c;相当于你往电脑里存东西的"容器"。这章我们把变量的命名规则、Python 的几种基本数据类型都过一遍。 变量是什么 说白了&#xff0c;变量就是一个有名字的盒子。你往里面放个东西&#xff0c;以后想用这个…...