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

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

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

一、前言

前段时间由于做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类型,所以需要手动取值

五、总结

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、对象转 Json
  • 三、Json 转对象
  • 四、需要注意的问题
    • 对象转Json需要注意的
      • Json 转对象需要注意的
      • 五、总结
      相关产品与服务
      网站建设
      网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档