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

Android:使用Gson常见问题(包含解决将Long型转化为科学计数法的问题)

一、解决将Long型转化为科学计数法的问题

1.1 场景

将一个对象转为Map类型时,调用Gson.fromJson发现,原来对象中的long类型的personId字段,被解析成了科学计数法,导致请求接口失败,报参数错误。

解决结果图
在这里插入图片描述

1.2、ExampleUnitTest.kt示例代码
data class ReuestParmObj(val personId: Long = 1668394335647, val personType: Int = 1)
class ExampleUnitTest {private val mGson: Gson = Gson()@Testfun gsonReuestParmJson() {val reuestParmObj = ReuestParmObj(1668394335647, 1)val reuestParmJson: String = mGson.toJson(reuestParmObj)println("reuestParmJson信息:$reuestParmJson")val mapParm: Map<String, *> =mGson.fromJson(reuestParmJson, Map::class.java) as Map<String, *>println("mapParms信息:$mapParm")}
}

测试结果
在这里插入图片描述

1.3 解决将Long型转化为科学计数法问题的方案

修改gson配置
private val mGson: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).create()

data class ReuestParmObj(val personId: Long = 1668394335647, val personType: Int = 1)
class ExampleUnitTest {
//    private val mGson: Gson = Gson()private val mGson: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).create()@Testfun gsonReuestParmJson() {val reuestParmObj = ReuestParmObj(1668394335647, 1)val reuestParmJson: String = mGson.toJson(reuestParmObj)println("reuestParmJson信息:$reuestParmJson")val mapParm: Map<String, *> =mGson.fromJson(reuestParmJson, Map::class.java) as Map<String, *>println("mapParms信息:$mapParm")}
}

测试结果
在这里插入图片描述

二、 把null值也转换,默认是不转换null值的

设置:serializeNulls()

 private val mGson: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls().create()

三、Html的转换

Gson默认是把Html 转义的,但也可以设置不转义。
设置:disableHtmlEscaping()

class ExampleUnitTest {@Testfun testDisableHtmlEscaping(){val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().disableHtmlEscaping().create()val htmlStr = "<h3>测试disableHtmlEscaping</h3>"println("未设置disableHtmlEscaping转换htmlStr结果:${gson1.toJson(htmlStr)}")println("设置disableHtmlEscaping转换htmlStr结果:${gson2.toJson(htmlStr)}")}
}

测试结果
在这里插入图片描述

四、设置输入json格式

默认的输出是compact格式,示例
{"personId":1668394335647,"personType":1}
设置:setPrettyPrinting()

class ExampleUnitTest {@Testfun testSetPrettyPrinting(){val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).setPrettyPrinting().create()val reuestParmObj = ReuestParmObj(1668394335647, 1)println("未设置 setPrettyPrinting 转换reuestParmObj结果:${gson1.toJson(reuestParmObj)}")println("设置 setPrettyPrinting 转换reuestParmObj结果:${gson2.toJson(reuestParmObj)}")}
}

测试结果
在这里插入图片描述

五、ExampleUnitTest.kt文件完整代码

import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.LongSerializationPolicy
import com.google.gson.reflect.TypeToken
import org.junit.Test/*** Example local unit test, which will execute on the development machine (host).** See [testing documentation](http://d.android.com/tools/testing).*/data class ReuestParmObj(val personId: Long = 1668394335647, val personType: Int = 1)
class ExampleUnitTest {private val mGson1: Gson = Gson()private val mGson2: Gson =GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).serializeNulls().disableHtmlEscaping().create()@Testfun gsonReuestParmJson() {val reuestParmObj = ReuestParmObj(1668394335647, 1)val reuestParmJson1: String = mGson1.toJson(reuestParmObj)val reuestParmJson2: String = mGson2.toJson(reuestParmObj)println("reuestParmJson1 信息:$reuestParmJson1")println("reuestParmJson2 信息:$reuestParmJson2")//        val type = object : TypeToken<Map<String, *>>() {}.type
//        val mapParm: Map<String, *> = mGson1.fromJson(reuestParmJson, type)val mapParm1: Map<String, *> =mGson1.fromJson(reuestParmJson1, Map::class.java) as Map<String, *>println("mapParm1 信息:$mapParm1")val mapParm2: Map<String, *> =mGson2.fromJson(reuestParmJson2, Map::class.java) as Map<String, *>println("mapParms2 信息:$mapParm2")/*reuestParmJson1 信息:{"personId":1668394335647,"personType":1}reuestParmJson2 信息:{"personId":"1668394335647","personType":1}mapParm1 信息:{personId=1.668394335647E12, personType=1.0}mapParms2 信息:{personId=1668394335647, personType=1.0}*/}@Testfun testDisableHtmlEscaping() {val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().disableHtmlEscaping().create()val htmlStr = "<h3>测试disableHtmlEscaping</h3>"println("未设置disableHtmlEscaping转换htmlStr结果:${gson1.toJson(htmlStr)}")println("设置disableHtmlEscaping转换htmlStr结果:${gson2.toJson(htmlStr)}")/*未设置disableHtmlEscaping转换htmlStr结果:"\u003ch3\u003e测试disableHtmlEscaping\u003c/h3\u003e"设置disableHtmlEscaping转换htmlStr结果:"<h3>测试disableHtmlEscaping</h3>"*/}@Testfun testSetPrettyPrinting() {val gson1: Gson = Gson()val gson2: Gson = GsonBuilder().setLongSerializationPolicy(LongSerializationPolicy.STRING).setPrettyPrinting().create()val reuestParmObj = ReuestParmObj(1668394335647, 1)println("未设置 setPrettyPrinting 转换reuestParmObj结果:${gson1.toJson(reuestParmObj)}")println("设置 setPrettyPrinting 转换reuestParmObj结果:${gson2.toJson(reuestParmObj)}")/*未设置 setPrettyPrinting 转换reuestParmObj结果:{"personId":1668394335647,"personType":1}设置 setPrettyPrinting 转换reuestParmObj结果:{"personId": "1668394335647","personType": 1}*/}
}
http://www.lryc.cn/news/429855.html

相关文章:

  • 【Win开发环境搭建】Redis与可视化工具详细安装与配置过程
  • Compose知识分享
  • python-study-day5
  • Telegram mini app 本地开发配置
  • python发票查验接口助您拒绝做糊涂账、发票ocr
  • 【Linux】线程控制|POSIX线程库|多线程创建|线程终止|等待|线程分离|线程空间布局
  • JimuReport 积木报表 v1.8.0 版本发布,开源可视化报表
  • 性能优化理论篇 | swap area是个什么东西
  • Photoshop (PS)下载安装win/mac版
  • 初识redis:Set类型
  • Qt 设置QTableView的某列或某行只读
  • 这么多焊工证,我该拥有那种焊工证呢?
  • HttpWebRequest访问https请求被中止: 未能创建 SSL/TLS 安全通道
  • 响应式Web设计:纯HTML和CSS的实现技巧
  • linux centos 防火墙常用命令
  • iOS18 Beta7 最终测试版推送:苹果的又一次技术飞跃
  • 超详细!2024叉车证办理及考试流程详解!速看!
  • 浅谈监听器插件之SSHMon Samples Collector
  • R语言论文插图模板第7期—分组散点图
  • 设计模式 抽象工厂方法模式
  • PowerShell 一键配置IP
  • 【Pyhthon读取 PDF文件表格 ,转为 CSV/TSV/JSON文件】
  • <数据集>商品条形码识别数据集<目标检测>
  • 无人机系统的关键技术
  • (24)(24.4) MultiWii/DJI/HDZero OSD (version 4.2 and later)(一)
  • HiveSQL:提取json串内容——get_json_oject和json_tuple
  • Clickhouse 二进制安装
  • 大数据开发工程师面试整理-项目经验
  • 游戏引擎详解——图片
  • 电商API数据接口在电商运营电商数据分析中的作用?