如何防止Gson将整数表示为浮点数

2023-11-25

当我尝试将字符串转换为 json 时,Gson 有一些奇怪的行为。下面的代码将字符串草稿转换为 json 响应。有没有办法阻止 gson 将 '.0 添加到所有整数值?

ArrayList<Hashtable<String, Object>> responses;
Type ResponseList = new TypeToken<ArrayList<Hashtable<String, Object>>>() {}.getType();
responses = new Gson().fromJson(draft, ResponseList);

draft:
[ {"id":4077395,"field_id":242566,"body":""},
  {"id":4077398,"field_id":242569,"body":[[273019,0],[273020,1],[273021,0]]},
  {"id":4077399,"field_id":242570,"body":[[273022,0],[273023,1],[273024,0]]}
]

responses:
[ {id=4077395.0, body=, field_id=242566.0},
  {id=4077398.0, body=[[273019.0, 0.0], [273020.0, 1.0], [273021.0, 0.0]], field_id=242569.0},
  {id=4077399.0, body=[[273022.0, 0.0], [273023.0, 1.0], [273024.0, 0.0]], field_id=242570.0}
]

您告诉 Gson 它正在寻找字符串到对象的映射列表,这实质上是说它可以对对象的类型做出最佳猜测。自从JSON 不区分整数和浮点字段对于数字字段,Gson 必须默认为 Float/Double。

Gson 的根本目的是检查要填充的对象的类型,以确定如何解析数据。如果你不给它任何提示,它就不会很好地工作。一种选择是定义一个自定义 JsonDeserializer,但是更好的方法是不使用 HashMap(并且绝对不要使用 Hashtable!),而是为 Gson 提供有关其期望的数据类型的更多信息。

class Response {
  int id;
  int field_id;
  ArrayList<ArrayList<Integer>> body; // or whatever type is most apropriate
}

responses = new Gson()
            .fromJson(draft, new TypeToken<ArrayList<Response>>(){}.getType());

再次强调,Gson 的重点是将结构化数据无缝转换为结构化对象。如果你要求它创建一个几乎未定义的结构,比如对象映射列表,那么你就违背了 Gson 的全部意义,并且还可以使用一些更简单的 JSON 解析器。

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

如何防止Gson将整数表示为浮点数 的相关文章

  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • Mipmap 与可绘制文件夹[重复]

    这个问题在这里已经有答案了 我正在使用 Android Studio 1 1 Preview 1 我注意到 当我创建一个新项目时 我得到以下层次结构 不同 DPI 的 Mipmap 文件夹 不再有不同 DPI 的可绘制文件夹 我应该将所有资
  • WorkManager 或 AlarmManager 用于日常请求然后通知工作?

    这是用例 用户设置具有特定时间的每日通知 在指定时间 发出网络请求以获取一些数据 然后使用检索到的数据显示通知 我不确定是否应该使用 AlarmManager 还是 WorkManager 来实现这个用例 据我了解 AlarmManager
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A
  • Dagger 2 中“HasFragmentInjector”的实际用法是什么

    我之前已经实现了 dagger2 v2 2 但现在他们也添加了 dagger android 部分 所以我正在用它创建示例项目 我知道旧的方法论 Provide and Modules and 成分等注释 但从 Dagger 2 8 开始
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 附加文本未在 d3 v4 中显示

    我正在尝试 翻译 平行坐标示例到新版本的 d3 v4 我有一个使用此 javascript 的工作示例 如果有人尝试使用 d3 的 v4 并对新功能有问题 这也是一个很好的示例 var margin top 30 right 10 bott
  • 如何让 jQuery 等待 Ajax 调用完成后再返回?

    我有一个需要登录的服务器端功能 如果用户登录 该函数将在成功时返回 1 如果没有 该函数将返回登录页面 我想使用 Ajax 和 jQuery 调用该函数 我所做的就是使用普通链接提交请求 并在其上应用点击功能 如果用户未登录或函数失败 我希
  • 是否有可以检查表情符号的特定范围的 unicode 代码点?

    表情符号是否占据明确定义的 unicode 范围 并且 在 python 2 7 中是否有确定的方法来检查代码点是否是表情符号 我似乎找不到这方面的任何信息 有几个消息来源指出了这个范围 U0001f600 U0001f650 但例如 有代
  • 即使使用 ChangeDetectionStrategy.OnPush 也会调用 Angular ngDoCheck()

    可以说我有一个像这样的组件结构 AppComponent HeaderComponent ContentComponent TodosComponent TodoComponent 如果我设置 HeaderComponent 的change
  • 从 BGL 图中提取邻接矩阵

    使用Boost图库我正在寻找一种方法提取邻接矩阵来自由以下任一表示的基础图boost adjacency list or boost adjacency matrix 我想结合使用这个矩阵boost numeric ublas求解联立线性方
  • 如何在 shell 中以可移植的方式在第一个空行上分割文件(例如使用 sed)?

    我想将包含 HTTP 响应的文件拆分为两个文件 一个仅包含 HTTP 标头 另一个包含消息正文 为此 我需要在第一个空行上将文件分成两个 或者对于仅包含 CR 的第一行的 UNIX 工具 r 字符 使用外壳脚本 如何以可移植的方式执行此操作
  • 错误 android SurfaceFlinger

    我有这个错误消息 SurfaceFlinger 半透明 0 isOpaque 1 isExternalDisplayLayer 0 isExternalBlockLayer0 我使用的是安卓4 1 1 我无法说出我的代码的哪一部分正在生成此
  • 使用 Watir 检查坏链接

    我有一个无序列表的链接 我保存在一边 我想单击每个链接并确保它转到真实页面 而不是 404 500 等 问题是我不知道该怎么做 是否有一些我可以检查的对象可以为我提供 http 状态代码或其他内容 mylinks Browser ul id
  • Android 中具有动态 ActionBar 颜色的半透明 StatusBar

    我正在尝试实现一个半透明的状态栏 以便我的导航视图是BEHIND状态栏 但仍然喜欢动态更改操作栏的颜色 因此 状态栏颜色需要更改为操作栏颜色的较暗版本 如果我将状态栏设置为透明 正如许多消息来源所建议的那样 我的 Primary dark
  • 如何编写多行命令?

    我们如何将命令扩展到下一行 基本上 Linux 的 Windows 替代品是什么 ls l usr 这里我们使用反斜杠将命令扩展到下一行 Windows 的等效项是什么 尝试了键盘上的几乎每个键后 C Users Tim gt cd Meh
  • 在 C# 中递归打印斐波那契字符串

    可以不用 while 循环来完成吗 static void Main string args Console WriteLine Please enter a number int number Convert ToInt32 Consol
  • Ruby on Rails:按月对博客文章进行分组

    嘿伙计们 我使用常见的 CRUD 操作创建了一个简单的博客应用程序 我还在 PostController 中添加了一个名为 archive 的新操作和一个关联的视图 在此视图中 我想带回所有博客文章并按月对它们进行分组 以这种格式显示它们
  • PHP 的 count() 函数对于数组来说是 O(1) 还是 O(n) ?

    Does count 真的计算了 PHP 数组的所有元素 还是这个值缓存在某处并且只是被检索 嗯 我们可以看一下源码 ext standard array c PHP FUNCTION count calls php count recur
  • 如何使用 BorderLayout 将两个组件放入 JPanel 中?

    基本上我想做的是添加两张图片 并排在 JPanel 的中心 并在 JPanel 的右侧添加一个 JLabel 所以我被告知将 JPanel 的布局设置为 BorderLayout 并使用 BorderLayout CENTER 添加图片 使
  • 创建一个自动填充目标页面上字段的链接

    我正在编写一份时事通讯 要求我这样做的人想要其中的链接 一切都很完美 没有问题 现在的问题是 当您单击此链接时 它会进入一个包含字段的页面 并且该人问我是否可以自动填写其中一个字段 该页面是某些服务的订阅页面 当您使用他的电子邮件登录该页面
  • 如何在 iPhone 的 Objective-C 中以编程方式调整图像大小

    我有一个应用程序 可以在很小的空间中显示大图像 这些图像相当大 但我仅以 100x100 像素帧显示它们 由于我使用的图像大小 我的应用程序响应缓慢 为了提高性能 如何使用 Objective C 以编程方式调整图像大小 请找到以下代码 U
  • 枚举的 rawValue 属性无法识别

    我正在使用 Xcode 6 的 Playground 来尝试 Swift 中的枚举 enum Rank String case One One Two Two init rawValue String self rawValue rawVa
  • 创建 Pandas 滚动窗口系列数组

    假设我有以下代码 import numpy as np import pandas as pd x np array 1 0 1 1 1 2 1 3 1 4 s pd Series x index 1 2 3 4 5 这会产生以下结果s 1
  • Python-pandas 将 NA 替换为数据框中一组的中位数或平均值

    假设我们有一个 df A B apple 1 0 apple 2 0 apple NA orange NA orange 7 0 melon 14 0 melon NA melon 15 0 melon 16 0 要替换 NA 我们可以使用
  • 如何防止Gson将整数表示为浮点数

    当我尝试将字符串转换为 json 时 Gson 有一些奇怪的行为 下面的代码将字符串草稿转换为 json 响应 有没有办法阻止 gson 将 0 添加到所有整数值 ArrayList