当前位置:网站首页>Json和对象之间转换的封装(Gson)
Json和对象之间转换的封装(Gson)
2022-07-31 11:55:00 【wresource】
一、前言
前段时间由于做spring boot的后端,经常需要进行Json 和对象之间的转换,所以利用Gson结合Kotlin扩展函数的特性封装了两个非常方便的函数,如果是其他语言,也可以封装一下,就是没Kotlin方便了。下面展示一下最终封装效果
对象转Json
val cat = Cat()
cat.toMyJson()Json转对象
//单个对象,这里转换成单个对象需要手动,主要是为例统一形式
val cat = Cat()
val data = cat.toMyJson()
data.toMyObject<Cat>()[0]
//list 类型
val cats = List<Cat>()
val dataList = cats.toMyObject<Cat>()[0]二、对象转 Json
这里的需要在Any下面进行扩展,由于Any为所有类的父类,这个和Java里面的Object 有点类似
fun Any.toMyJson():String{
return Gson().toJson(this)
}封装好了就可以直接用了,这个处理起来Gson也没有那么难,但只用写点的方式,节省了打括号的时间
val cat = Cat()
cat.toMyJson()三、Json 转对象
这个起初封装的时候还有点问题,首先扩展对象比较容易找到,就是String类型,但有一点需要进行注意的,这里Gson转化用到了反射机制,所以需要做两个处理
- 进行泛型实化处理
- 处理反射相关的问题
最终代码效果
inline fun <reified T> String.toMyObject(): List<T> {
val listType: Type = `$Gson$Types`.newParameterizedTypeWithOwner(null, ArrayList::class.java, T::class.java)
return if(!contains("[")){
Gson().fromJson("[${this}]", listType)
}else{
Gson().fromJson(this, listType)
}
}封装的使用
val cat = Cat()
val data = cat.toMyJson()
data.toMyObject<Cat>()[0]不过这里有个缺点就是如果是单个对象的话,需要手动取第一个值作为对象,因为返回值是list类型的,如果有大佬有换返回值类型的方法,欢迎评论区留言
四、需要注意的问题
对象转Json需要注意的
这个只需要注意转换之后的格式即可,list或者单个对象都是可以直接转换的
Json 转对象需要注意的
这个需要注意的就是对象是什么类型的要清楚,还有就是非Json格式的字符串是不能转换成功的,虽然它有这个方法,然后目前我这套方案是转化成统一的list类型,所以需要手动取值
五、总结
以前碰到这些是相当的头疼,经常就需要转来转去的,网上的文章很多都没讲明白,虽然封装好的库,就这么几行代码,总之,方便开发才是最好的,这种繁琐的事越简单越好。
边栏推荐
- 502 bad gateway原因、解决方法
- Use jOOQ to write vendor-agnostic SQL with JPA's native query or @Formula.
- Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
- 关于Mysql数据库的介绍
- VBA输出日志到工作簿demo
- 给你一个大厂面试的机会,你能面试上吗?进来看看!
- 想吃菌子,当然是自己上山找了
- B/S架构模式的一个整体执行流程
- 一周精彩内容分享(第14期)
- xmind使用指南(XMind具有下列哪些功能)
猜你喜欢

最新MySql安装教学,非常详细

矩形脉冲波形的占空比及脉冲和瞬态特征的测量

Redis学习笔记-3.慢查询和其他高级数据结构

基于C51实现按键控制

Android studio connects to MySQL and completes simple login and registration functions

分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ

After Effects 教程,如何在 After Effects 中修复曝光不足的镜头?

拥抱趋势!阿里这套微服务开源框架权威手册,实战到底层细致清晰

vb.net 画曲线

订song餐系统
随机推荐
学自动化测试哪个培训机构好 试听课程后就选了这个地方学习
CameraToolUnity中两种摄像机的两种观察控制方式
关于Mysql数据库的介绍
线程池 ThreadPoolExecutor 详解
普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
初识QEMU
JVS应用中心
How to correctly write the binary stream of the file returned by the server to the local file and save it as a file
lotus-local-net 2k v1.17.0-rc4
LeetCode 1161.最大层内元素和:层序遍历
台达PLC出现通信错误或通信超时或下载时提示机种不符的解决办法总结
IDEA 配置方法注释自动参数
SAP Commerce Cloud Product Review 的添加逻辑
一、excel转pdf格式jacob.jar
IDEA configure method annotation automatic parameters
在 Excel 内使用 ODBC 消费 SAP ABAP CDS view
Docker实践经验:Docker 上部署 mysql8 主从复制
科学论文和学术论文写作
最近两个月谷歌 ad 掉的厉害
三六零与公安部三所发布报告:关基设施保护成为网络安全博弈关键