专业的JAVA编程教程与资源

网站首页 > java教程 正文

java对象与json互转的舞台-Gson(java对象转json fastjson)

temp10 2024-10-10 12:17:31 java教程 6 ℃ 0 评论

综述

今天单独说说Google的Gson在进行json和java对象之间的转换的那些事情。

利用序列化和反序列化技术,实现json字符串和java对象之间的转换。当然了,对于包含泛型类的序列化和反序列化Gson也提供了很好的支持。

java对象与json互转的舞台-Gson(java对象转json fastjson)

大家都知道,由于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,谢谢。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表