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

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

一、前言

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

五、总结

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

目录
相关文章
|
3月前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
1月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
1月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
1月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
218 7
|
1月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
65 3
|
2月前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
2月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
77 1
|
4月前
|
存储 JSON 测试技术
python中json和类对象的相互转化
针对python中类对象和json的相关转化问题, 本文介绍了4种方式,涉及了三个非常强大的python库jsonpickle、attrs和cattrs、pydantic,但是这些库的功能并未涉及太深。在工作中,遇到实际的问题时,可以根据这几种方法,灵活选取。 再回到结构化测试数据的构造,当需要对数据进行建模时,也就是赋予数据业务含义,pydantic应该是首选,目前(2024.7.1)来看,pydantic的生态非常活跃,各种基于pydantic的工具也非常多,建议尝试。
|
4月前
|
JSON Java fastjson
Spring Boot返回Json数据及数据封装
本文详细介绍了如何在Spring Boot项目中处理JSON数据的传输 Spring Boot默认使用Jackson作为JSON处理器,并通过`spring-boot-starter-web`依赖自动包含相关组件。文章还展示了如何配置Jackson处理null值,使其转换为空字符串。此外,文章比较了Jackson和FastJson的特点,并提供了FastJson的配置示例,展示了如何处理null值以适应不同应用场景。
|
5月前
|
JSON Java fastjson
老程序员分享:java对象转json
老程序员分享:java对象转json
173 3