前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Json和对象之间转换的封装(Gson)

Json和对象之间转换的封装(Gson)

原创
作者头像
wresource
发布于 2022-07-31 03:17:48
发布于 2022-07-31 03:17:48
1.5K0
举报
文章被收录于专栏:云服务器开发云服务器开发

一、前言

前段时间由于做spring boot的后端,经常需要进行Json 和对象之间的转换,所以利用Gson结合Kotlin扩展函数的特性封装了两个非常方便的函数,如果是其他语言,也可以封装一下,就是没Kotlin方便了。下面展示一下最终封装效果

对象转Json

代码语言:text
AI代码解释
复制
val cat = Cat()
cat.toMyJson()

Json转对象

代码语言:text
AI代码解释
复制
 //单个对象,这里转换成单个对象需要手动,主要是为例统一形式
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 有点类似

代码语言:text
AI代码解释
复制
fun Any.toMyJson():String{
    return Gson().toJson(this)
}

封装好了就可以直接用了,这个处理起来Gson也没有那么难,但只用写点的方式,节省了打括号的时间

代码语言:text
AI代码解释
复制
val cat = Cat()
cat.toMyJson()

三、Json 转对象

这个起初封装的时候还有点问题,首先扩展对象比较容易找到,就是String类型,但有一点需要进行注意的,这里Gson转化用到了反射机制,所以需要做两个处理

  • 进行泛型实化处理
  • 处理反射相关的问题

最终代码效果

代码语言:text
AI代码解释
复制
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)
    }
}

封装的使用

代码语言:text
AI代码解释
复制
val cat = Cat()
val data = cat.toMyJson()
data.toMyObject<Cat>()[0]

不过这里有个缺点就是如果是单个对象的话,需要手动取第一个值作为对象,因为返回值是list类型的,如果有大佬有换返回值类型的方法,欢迎评论区留言

四、需要注意的问题

对象转Json需要注意的

这个只需要注意转换之后的格式即可,list或者单个对象都是可以直接转换的

Json 转对象需要注意的

这个需要注意的就是对象是什么类型的要清楚,还有就是非Json格式的字符串是不能转换成功的,虽然它有这个方法,然后目前我这套方案是转化成统一的list类型,所以需要手动取值

五、总结

以前碰到这些是相当的头疼,经常就需要转来转去的,网上的文章很多都没讲明白,虽然封装好的库,就这么几行代码,总之,方便开发才是最好的,这种繁琐的事越简单越好。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你应该知道的kotlin实用技巧
众所周知,kotlin是google力推的用以取代java的android开发语言 kotlin使用起来比较方便,同时有许多语法糖 本文主要讲解了一些比较实用的kotlin技巧
用户9253515
2022/01/06
1.4K0
你应该知道的kotlin实用技巧
众所周知,kotlin是google力推的用以取代java的android开发语言
做个快乐的码农
2022/01/04
1.6K0
你应该知道的kotlin实用技巧
有意思,发现Kotlin一个神奇的bug!
本文将会通过具体的业务场景,由浅入深的引出Kotlin的一个bug,并告知大家这个bug的神奇之处,接着会带领大家去查找bug出现的原因,最后去规避这个bug。
程序员小顾
2022/01/06
9400
Gson 解析 Json 容错才是关键,举几个常用的实例!
Gson是一个Java库,它不仅可以把Java对象转化为Json格式,它也能将一段Json格式的字符串转化为相对于的Java对象。 Gson适用于所有Java对象,即使是那些你不知道源代码的对象。
Android技术干货分享
2019/07/01
3.3K0
Gson 解析 Json 容错才是关键,举几个常用的实例!
Kotlin 泛型详解
0. 引子 Kotlin 100% 与 Java 兼容,所以抛开语言表面上面的种种特质之外,背后的语言逻辑或者说“灵魂”与 Java 总是想通的。本文只涉及 Kotlin Jvm,Kotlin Js、Kotlin Native 的具体实现可能有差异。 最近一段时间在网上发了一套 Kotlin 的入门视频,涵盖了基础语法、面向对象、高阶函数、DSL、协程等比较有特色的知识点,不过有朋友提出了疑问:这门课为什么不专门讲讲泛型、反射和注解呢? 我最早听到这个问题的时候,反应比较懵逼,因为我居然没有感觉到 Kotl
腾讯Bugly
2023/04/02
1.2K0
Kotlin 泛型详解
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
在Android中,可以使用Kotlin协程来处理异步任务,例如网络请求、数据库操作等。以下是一个简单的示例,展示如何在Android中使用协程进行异步编程:
AntDream
2024/10/23
9620
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
kotlin入门之泛型
为什么List<TextView> textViews=buttons;会报错呢?这是因为Java的泛型本身 具有不可变性。Java里面会认为List<TextView> 和List<Button>类型不一致, 也就是说,子类的泛型(List<Button>)不属于泛型(List<TextView> )的子类。
易帜
2022/02/09
1.2K0
还在被数据类的序列化折磨?是时候丢弃 Gson 了
看名字就知道这是 Kotlin 官方的序列化框架了,它支持 JSON/CBOR/Protobuf,下面我们主要以 JSON 为例介绍它的功能(因为后面那俩不是给人看的啊)。
bennyhuo
2020/02/20
2.5K0
Kotlin 泛型之类型擦除
Kotlin 基于 Java 6,因此 Kotlin 天生支持泛型。但是 Kotlin 的泛型有自己的特点。
fengzhizi715
2019/06/11
1.8K0
Android 序列化框架 Gson 原理分析,可以优化吗?
Gson[1] 是 Google 推出的 Java Json 解析库,具有接入成本低、使用便捷、功能扩展性良好等优点,想必大家都很熟悉了。在这篇文章里,我们将讨论 Gson 的基本用法和以及主要流程的源码分析。
用户9995743
2022/12/22
2.4K0
Android 序列化框架 Gson 原理分析,可以优化吗?
Kotlin | 9. 泛型
本章内容包括: 声明泛型函数和类 类型擦除和实化类型参数 声明点变型和使用点变型 9.1 泛型类型参数 // 如果要创建一个空的列表,必须显示的指定,有值的话可以被推导出来 val readers: MutableList<String> = mutableListOf() val readers1 = mutableListOf<String>() val reader2 = listOf("jingbin", "jinbeen")
Jingbin
2021/03/02
1.8K0
Kotlin泛型的型变之路
之前就写过一篇泛型的文章,但是总觉得写得不够系统,所以最近对泛型又作了些研究,算是对这篇文章的补充了。
用户1907613
2023/03/01
1.2K0
Kotlin泛型的型变之路
Kotlin入门(31)JSON字符串的解析
json是App进行网络通信最常见的数据交互格式,Android也自带了json格式的处理工具包org.json,该工具包主要提供了JSONObject(json对象)与JSONArray(json数组)的解析处理。下面分别介绍这两个工具类的用法:
aqi00
2019/01/18
4.3K0
Kotlin —— 这次入门就不用放弃了
声明:本文是FEELS_CHAOTIC原创,已获其授权发布,未经原作者允许请勿转载
用户2802329
2018/08/07
1.7K0
Kotlin —— 这次入门就不用放弃了
json与类,集合的转换(一)之gson实现
主要用于存储对象状态为另一种通用格式,比如存储为二进制、xml、json等等,把对象转换成这种格式就叫序列化,而反序列化通常是从这种格式转换回来。
周杰伦本人
2023/10/12
2720
json与类,集合的转换(一)之gson实现
Android避坑指南,Gson与Kotlin碰撞出一个不安全的操作
是的,确实很偏,跳过这个问题,我们往下看,看看是怎么在Android开发过程中遇到的,而且看完后,这个问题就迎刃而解了。
李林LiLin
2021/02/19
1.4K0
手把手教你搭建android模块化项目框架(六)存储之mmkv
本来想连room一起封装好的,但是临时有事,就先发个mmkv,下期我们研究room
支离破碎_superLee
2023/09/01
4150
Retrofit 妙用,拒绝重复代码!
由于后台返回统一数据结构,比如 code, data, message; 使用过 Retrofit 的同学一定定义过类似 BaseResponse 这种类,但是 BaseResponse 的处理逻辑都大同小异, 每次都写着实让人很烦,有没有什么好的方式解决这一痛点呢?本文讲介绍一种优雅的方式 来解决这一问题。
用户9239674
2021/12/26
7070
Kotlin 开发中遇到的坑(持续更新)
由代码可见,mHomeWorkId 是一个不能为null的String。然后通过intent.getStringExtra 方法给mHomeWorkId赋值。
李林LiLin
2021/01/03
4.7K0
一个实例学习Kotlin 开发 Android App 的全过程(内有代码)
自 Google I/O 大会,Google 正式宣布 Kotlin 成为 Android 开发的官方语言的五个月以来,不少开发团队都开始使用 Kotlin 对 Android 应用进行重写。本文分享
IT派
2018/03/27
5.4K0
一个实例学习Kotlin 开发 Android App 的全过程(内有代码)
相关推荐
你应该知道的kotlin实用技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文