网站首页 > java教程 正文
综述
今天单独说说Google的Gson在进行json和java对象之间的转换的那些事情。
利用序列化和反序列化技术,实现json字符串和java对象之间的转换。当然了,对于包含泛型类的序列化和反序列化Gson也提供了很好的支持。
大家都知道,由于java泛型的实现机制,泛型会有类型擦除的特点,使用了泛型的代码在运行期间相关的泛型参数会被擦除,这个怎么解释呢,java 泛型的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类型在编译后都会被清除掉。
但是有时候我们需要获取泛型参数的类型,比如将泛型的java代码序列化或者反序列化的时候。
普通对象
普通的对象使用方法啊很简单,一行代码搞定。
运行结果:
普通对象-泛型
将普通对象进行泛型封装,做成工具类,随时转换。
运行结果:
嵌套对象
学生-课程-年纪
运行结果:
2018-09-04 13:20:14 -11 [main] INFO - {"id":1,"user_name":"小明","grade":{"course":"一年级","score":"no_1","level":"one"},"courses":[{"id":1,"name":"语文"}]}
2018-09-04 13:20:14 -12 [main] INFO - Student [id=1, name=小明, grade=Grade [course=一年级, score=no_1, level=one], courses=[Course [id=1, name=语文]], createDate=null]
字段名的对应
有时候java对象字段名称和json字段名称不一样,这样两个不同的字段做映射,可以使用gson提供的这个注解。
这样对象转的json中,name变成了,user_name,同样json转java对象的时候user_name变成了name。
控制某些字段的是否可以被序列化
Gson提供了@Expose注解来控制成员变量的序列化和非序列化,这个注解有两个变量:serialize和deserialize,默认都是true。但是如果想要使这个注解生效,必须使用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法来构建Gson对象。
运行结果:
版本号控制
Gson提供了@Since注解进行版本控制,使用GsonBuilder构建时指定版本号,高于该版本的字段在序列化和反序列化时都将被忽略。这个例子大家动手去做,如果有这方面的需求,这个功能还是很不错的。
List、Map
运行结果:
map同理:更换type就可以了。
Type type= new TypeToken<HashMap<String, Object>>(){}.getType();
最后
过段时间不忙了,会找个时间带领大家分析下gson的源码,感兴趣的同学请关注下我的头条号:程序员的365,谢谢。
猜你喜欢
- 2024-10-10 简单的对象转换方法类分享(对象转化为字符串的几种方式)
- 2024-10-10 为什么 JSON 不适合作为配置语言?
- 2024-10-10 JSON 对象的这些操作和使用场景你知道多少?
- 2024-10-10 第27天|Java入门有野,json操作(java的json解析几种方法)
- 2024-10-10 如何使用springmvc返回json格式的数据?
- 2024-10-10 springboot从小白到大神-007处理Json数据进阶
- 2024-10-10 Fastjson2如何进行JSON的解析和对象序列化?
- 2024-10-10 Java笔试题目分享(2)知识点总结——Json对象
- 2024-10-10 面试官问,你知道http请求怎么在你的项目中变成Java对象吗?
- 2024-10-10 Spring Boot 中使用FastJSON来替换默认的JSON数据序列方式?
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)