Gson Long 从 String 解析时丢失数据

2023-12-21

我有一些对象的 json 字符串表示 类对象是

public class SMPBBaseObjectsList {

    public ArrayList<Object> data = new ArrayList<>();
    public Integer count;
    public Integer limitFrom;
    public Integer limitTo;
    public Boolean hasMore;
    public String dataItemsClass;
}

我有 json

{“classItem”:“smpb.utility.classes.SMPBBaseObjectsList”,“dataItemsClass”:“smpb.base.classes.SMPBUser”,“dataSliceCode”:“012013”​​,“data”:[{“id”:1374046117510970000,”名称":"Test3","classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}],"filter":{"orderItems":[],"filterItems":[]} }

我尝试解析这个 json 并使用下一个代码创建我的类的对象:

 String json = "{\"classItem\":\"smpb.utility.classes.SMPBBaseObjectsList\",\"dataItemsClass\":\"smpb.base.classes.SMPBUser\",\"dataSliceCode\":\"012013\",\"data\":[{\"id\":1374046117510970000,\"Name\":\"Test3\",\"classItem\":\"smpb.base.classes.SMPBUser\",\"dataSliceCode\":\"012013\"}],\"filter\":{\"orderItems\":[],\"filterItems\":[]}}";
        SMPBBaseObjectsList list = new GsonBuilder().create().fromJson(json, SMPBBaseObjectsList.class);
        System.out.println("BEFORE:" + json);
        System.out.println("AFTER: " + list);

系统输出:

BEFORE:{“classItem”:“smpb.utility.classes.SMPBBaseObjectsList”,“dataItemsClass”:“smpb.base.classes.SMPBUser”,“dataSliceCode”:“012013”​​,“数据”:[{“id”:1374044905885298000,"名称":"Test3","classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}],"filter":{"orderItems":[],"filterItems":[ ]}}

AFTER:{“classItem”:“smpb.utility.classes.SMPBBaseObjectsList”,“dataItemsClass”:“smpb.base.classes.SMPBUser”,“dataSliceCode”:“012013”​​,“数据”:[{“名称”:“Test3” ,“id”:1.374044905885298011E18,"classItem":"smpb.base.classes.SMPBUser","dataSliceCode":"012013"}],"filter":{"orderItems":[],"filterItems":[]}}

正如你在 Json String 中看到的,我的 ID 值为 1374044905885298000 ,但是当从字符串序列化对象时,我得到 1.374044905885298011E18

问题是 Long 的这个表示丢失了最后一个零 0000 而我得到了 Long 1374044905885297920

为什么?以及如何修复它?

Array中的数据是String map,并且已经都是Long id Double格式。

我尝试为 Long 或 Double 注册适配器,但从未触发。

Gson 2.2.4版本

UPDATE

这不是问题的重复

如何防止Gson将长数字(json字符串)转换为科学记数格式? https://stackoverflow.com/questions/11586299/how-to-prevent-gson-from-converting-a-long-number-a-json-string-to-scientific


我无法准确说出问题是什么,但您可以通过创建另一个类来解决它,即Data使用在List而不是Object类...我尝试了这段代码,它对我来说工作得很好!

因此,您需要更换ArrayList<Object>在你的SMPBBaseObjectsList by:

public ArrayList<Data> data = new ArrayList<>()

并创建一个像这样的新类:

public class Data {    
    public Long id;
    public String Name;
    public String classItem;
    public String dataSliceCode;
}

我猜想将 JSON 解析为Object对象,它可能会进行一些转换,从而导致该数字格式,但不幸的是我不是这个 Java 低级问题的专家......
无论如何,通过这段代码,您明确指定您希望将该值解析为Long,所以没问题!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gson Long 从 String 解析时丢失数据 的相关文章

  • 如何在itext中设置自定义颜色?

    感谢您花时间回答我的问题 我正在使用 Java 中的 iText 生成 PDF 文档 我需要将表的列标题设置为与值列中的颜色不同的颜色 我有来自 Photoshop 的颜色十六进制值 我正在使用带有块和段落的 PdfPTable 除了 Ba
  • Maven UTF-8编码问题

    当我使用两个不同的项目运行下面的代码时 我得到不同的输出 String myString T rk e Karakter Testi i String value new String myString getBytes UTF 8 Sys
  • 协助持续进行 Java 到 C# 转换的工具

    如今 许多项目都是用 Java 编写的 其中一些最终转换为 C 以合并到 NET 中 我想到的例子有 log4net nhibernate 和 db4o 包括 Sharpen db4o 的工具 在内 您是否见过和 或使用过任何使连续转换变得
  • 如何从内容处置中读取编码的文件名

    我得到的内容处置标头值如下 附件 文件名 UTF 8 album jpeg 如何从中提取文件名 album jpeg 在查看该值时 它具有编码格式值 使用Spring的内容配置 https docs spring io spring doc
  • 超立方体错误。非法的最小或最大规格

    尝试从这里运行示例代码http tess4j sourceforge net codesample html http tess4j sourceforge net codesample html我收到一条错误消息 Error Illega
  • 具有“繁忙”线程的 threadPoolExecutor 如何被终止?

    我的问题有点复杂 让我尝试彻底解释一下 但如果您需要更多详细信息 请随时询问我 我会添加它们 我最近 通过实验 了解到 如果线程连续工作 例如 while true 循环中的整数运算 则中断线程对其没有影响 话题继续进行 就像什么都没发生一
  • Gradle 同步失败:配置项目“:lib”时出现问题

    我正在尝试在 android studio 中构建一个项目 但它总是失败 并出现名为 org gradle api ProjectConfigurationException A problem occurred configuring p
  • 将 4 个字节转换为无符号 32 位整数并将其存储在 long 中

    我正在尝试用 Java 读取二进制文件 我需要读取无符号 8 位值 无符号 16 位值和无符号 32 位值的方法 执行此操作的最佳 最快 最美观的代码 是什么 我在 C 中做到了这一点 并做了类似的事情 uint8 t buffer uin
  • Spring MVC 应用程序可以是多线程的,即使它的 servlet 不是吗?

    当您谈论 Spring 应用程序是多线程时 您是否一定是指该应用程序中定义的 servlet 是否是多线程的 或者即使应用程序中的 servlet 不是多线程 Spring 应用程序也可以配置为多线程吗 不再支持单线程 servlet 它们
  • Mac OSX 上使用 Java 7 的透明 JFrame/JWindow

    我们有一个屏幕共享小程序 它打开 Swing JFrame 并使用 Robot 类捕获空框架后面的屏幕 用户可以单击框架并与小程序后面的任何内容进行交互 这在 Windows 上运行良好 并且用于 Apple 的 Java 版本 但对于 M
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • 使用 Gradle 构建 Kotlin + Java 9 项目

    我对 Gradle 老实说 还有 Java 9 相当陌生 我正在尝试使用 Gradle 构建一个混合了 Java 9 和 Kotlin 的简单库项目 更详细地说 Java中有一个接口 Kotlin中有一个实现 我会用 Kotlin 做所有事
  • IntelliJ 对于 Java 项目使用的默认构建过程是什么?

    直接从 IntelliJ 中的 IDE 构建 Java 项目非常好 它速度很快 而且很有效 我无法找到任何有关 IntelliJ 如何进行这些默认构建的文档 我猜它使用Ant 我想做的是为下载我的项目的任何人自动化这个快速 轻松的构建过程
  • 使用 spring mvc 的多个域

    假设我有一个应用程序必须缩短 URL 但还要执行其他操作 喜欢google com and goo gl or facebook com and fb me 部署两个应用程序很容易 但 目前 仅部署一个应用程序更简单 使用 spring 和
  • 应返回带有 html 代码的字符串的支持 bean 属性返回空字符串

    我的支持 bean 中有一个返回 html 代码的属性 public String getHtmlPrevisualizar return Hello world 我想要做的是在 iframe 中显示这个 html 代码 我用 JavaSc
  • 从 Spring 启动运行 Java 类

    我使用的是Java8和Spring4 3 1 我有一个 Java Spring 应用程序托管由浏览器和移动应用程序客户端访问的 RESTfult 服务 其次 我编写了一个侦听事件的聊天服务器 socket io 来自客户 该聊天服务器正在从
  • 为什么我得到:没有有效的 JFX 运行时

    我有一个使用 java 1 6 编译并使用 jnlp webstart 运行的现有应用程序 如果我使用 JRE 1 6 从客户端运行此应用程序 一切都会很好 但是 当我使用 java JDK 7 编译代码并使用 JRE 1 7 67 运行客
  • 尝试 Catch 性能 Java

    当捕获异常而不是进行检查时 try catch 需要多长时间 以纳秒为单位 假设消息具有用于查找的 HashMap 类型性能 try timestamp message getLongField MessageField TIMESTAMP
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 应用服务器如何注入私有字段?

    我看到这个问题 注入私有 包或公共字段或提供 setter https stackoverflow com questions 2021716 inject into private package or public field or p

随机推荐

  • 如何将 g:link 合并到普通按钮中?

    In my grails应用程序有一个view与一个g link标签 它工作正常 但视觉效果有点尴尬 因此 我想掩饰这一点g link用一个普通的按钮 我尝试过一个span class and input type button 但这并没有
  • unordered_map vs map vs array - 内存分析

    正如标题所说 我想知道之间的内存差异unordered map map and array Example unordered map
  • 为什么抛出局部变量调用移动构造函数?

    最近 我 玩弄 了右值来理解它们的行为 大多数结果并不让我感到惊讶 但后来我发现 如果我抛出一个局部变量 则会调用移动构造函数 在那之前 我认为移动语义规则的目的是保证仅当编译器可以检测到该对象将不再被使用 如在临时对象中 时才会移动 并变
  • 如何在 Seaborn distplot 中绘制 Pandas 日期时间系列?

    我有一个带有日期时间列的熊猫数据框 我想根据该日期列绘制行的分布 但我目前收到一个无用的错误 我有 df Date pd to datetime df Date errors raise s sns distplot df Date 这会引
  • 模板引用变量中的 ref- 前缀和 # 有什么区别(Angular 2)

    我想了解输入文本框中下面提到的模板引用变量符 号之间的区别
  • 如何将手势从 UITextView 传递到 UICollectionViewCell

    我有一个水平滚动的 UICollectionView 和包含 UITextView 的 UICollectionViewCells 有什么方法可以将 textview 上的手势传递给单元格 以便调用 didSelectItemAtIndex
  • 来自 GitHub 的 Grails 插件

    如果我想使用来自 Git Hub 的 Grails 插件 我是否只需下载 zip 文件并使其在本地 Maven 存储库中可用 我位于防火墙后面 这不允许我解决依赖关系 您可以获取源并运行maven install要使其在本地 Maven 存
  • scikit-learn 的 KNN 如何计算概率估计?

    scikit learn中KNN算法的实现是如何计算概率估计的predict proba X method 以下示例摘自 sklearn 文档 但进行了一些修改 以便您可以理解我们在这种情况下做什么 有关更多详细信息 请参见 https s
  • 自定义颤振小部件形状

    我正在尝试在 Flutter 中构建以下布局 我希望实现两件事 渲染绘制对角线的背景 我猜是通过 BoxDecoration 让粉色容器沿着对角线夹住子项 即 如果文本对于一行来说太大 则应换行到新行 有任何想法吗 这是我的代码 Stack
  • 如何部署我的 Windows Phone 8.1 应用程序?

    我刚刚使用 update 2 RC 更新了我的 Visual Studio Professional 2013 我做了一个简单的应用程序来尝试 我选择发布并单击项目中的构建按钮 但它不适用于创建 xxxx appx 文件 它正在创建 xxx
  • python - 将列表a中的每个元素与列表b相乘并相加

    功能 def unique common a b 我有两个清单 可以说 a 2 3 5 7 9 和另一个清单 b 5 8 4 1 11 此列表 b 为您提供与第一个列表 a 对应的每件商品的单件价格 例如 如果您要购买 2 单位的第一项商品
  • Flash 内容的 IE7 z-index 问题

    我遇到了 IE7 中的 Flash 内容始终位于菜单项上方的问题 我有如下结构 div div div ul li foo li li bar li ul div 现在 菜单的最后一项打开 它显示在 Flash 内容后面 摩天大楼位于页面内
  • Jquery阅读文章内容之间的位置进度

    在这个例子中http jsfiddle net SnJXQ 61 http jsfiddle net SnJXQ 61 阅读进度指示器 但它的宽度从网站顶部开始增加 但我们需要进度条宽度开始增加 当文章内容 div 到达文章内容末尾时 这是
  • Google Cloud Datastore 与 Google App Engine

    我正在查看新的 Google Cloud Datastore 看起来很棒 但有一些我无法理解的事情 它应该取代 Google App Engine 数据存储吗 如何在 GAE 中使用它 他们两者有什么区别呢 我有一个 Java 中的 GAE
  • 更新 Google App Engine 上数据存储区中的大量实体

    我想对特定类型的所有实体执行一个小操作并将它们重写到数据存储中 我目前有 20 000 个此类实体 但想要一个可以扩展到任意数量的解决方案 我有什么选择 Use a mapper http code google com p appengi
  • 如何在Chrome开发工具中返回当前调试位置?

    我不断发现代码在 Chrome 调试器中的断点处停止的情况 然后当我使用 控制台 等另一个选项卡并返回 源 时 我丢失了代码停止的位置 我必须单击单步 回到正轨 但这会跳过所寻求的断点 有没有办法到达调试器停止的地方 您可以通过单击调用堆栈
  • 如何添加/设计回调函数

    如何在 C 中设置 注册回调函数 以便在从队列中读取数据时调用函数 Edit 1 使用尼尔的答案作为完整的答案 在头文件中 include
  • 如何在 Android 中读取文本文件? [复制]

    这个问题在这里已经有答案了 我想从文本文件中读取文本 在下面的代码中 发生了异常 这意味着它转到catch堵塞 我将文本文件放在应用程序文件夹中 我应该把这个文本文件 mani txt 放在哪里才能正确读取 try InputStream
  • 必须为此操作提供 PartitionKey 值

    我正在尝试从 Azure Cosmos Db 集合中检索文档 我遇到了错误 Servlet service for servlet dispatcherServlet in context with path threw exception
  • Gson Long 从 String 解析时丢失数据

    我有一些对象的 json 字符串表示 类对象是 public class SMPBBaseObjectsList public ArrayList data new ArrayList lt gt public Integer count