从业务方面浅谈Gson的使用方法

Tips:.本文主要从开发业务方面探讨Gson的使用方法。个人愚见,希望所有帮助。

首先附上官方的API文档,所有的博客都是起到辅助理解的作用,想要深入,最好学好英语看官方API。
http://www.javadoc.io/doc/com.google.code.gson/gson/2.8.0

1.业务上常用且最基本对象转json字符串,json字符串转对象。

a.对象转json

Gson gson = new Gson();
String str = gson.toJson(Object);

b.json转对象

Gson gson = new Gson();
Object obj = gson.fromJson(str, Object.class);

2.复杂对象(List<Object>),复杂Json字符串转换,需使用Gson的TypeToken类

这里解释一下TypeToken是什么,Type是”类型”的意思,Token是”记号”的意思,翻译过来就是类型记号。那么什么是类型记号?为什么要叫类型记号?

其实这个类是谷歌为泛型量身打造的,因为泛型只存在编译级别,在运行时并没有泛型的存在。(这里涉及到java泛型的意义和用处,童鞋们可以自行去百度)。Gson为了解析复杂Json字符串,需要在运行时记住泛型对象,所以造了一个类型记号类(TypeToken)来标记它。
其用法相当简单:

a.对象转json

同基本方法一样

b.json转对象

Type type= new TypeToken<List<String>>(){}.getType();
Gson gson = new Gson();
Object obj = gson.fromJson(str, type);

很多人看不懂 new TypeToken<List<String>>(){}.getType()为什么这么写。这里解释一下,首先前面的new TypeToken<List<String>>(){}其实是new了一个匿名内部类,我们的目的只是为了调用它里面的getType方法,所以采用匿名内部类来实现。通过getType方法可以记录下List<String>里面所有的类型。

3.JsonParser的使用场景

a.获取单个值
在上面普通的Gson使用方法中,如果我们需要解析Json字符串,就要创建对应的JavaBean,如果在开发过程中我只需要其中的一两个字段的值,或者这个Json我们只需要用一次,那么再去创建javaBean就会显得很麻烦。这时候我们就需要用到JsonParser
用法也很简单:

JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = (JsonObject) jsonParser.parse(str);
String value= jsonObject.get("key").getAsString();

这里要注意jsonObject.get(“key”)获取的jsonElement一定要是个字符串,否则用getAsSting会出异常。要与本身的toString 区分开来,toString的对象可以不用是字符串。

b.解析转义字符串
有时候我们会发现后台传过来的数据可能带有很多反斜杠,类似于这样

发生这种情况的原因,是因为嵌套使用了Gson转字符串导致的。我们设想一下,我们有一个班级类Clazz,班级里面有一个学生Student。开发人员首先将Student用Gson转成了Json字符串。因为Student是个字符串,并且它是Json对象,所以里面有引号。所以将Clazz转为Json时会把Student里面的引号加反斜杠转义。最后将这个Json字符串放进Clazz类里面,这个Clazz类转为Json字符串时,Student就会出现转义字符,也就是所谓的反斜杠。
如果我们要对这个Student进行反序列化,那么第一步就是去除反斜杠。因为不去除反斜杠,Student它只是一个字符串,并不能称之为Json对象。只有符合Json规范的字符串才能称之为Json对象。
因此我们在将Json字符串反序列化之前,也就是转为对应的实体类之前,我们首先要将它变为符合Json对象的字符串。

JsonParser jsonParser = new JsonParser();
String jsonObject = (JsonObject) jsonParser.parse(str).toStrng();

随后再进行反序列化成对象:

Gson gson = new Gson();
Object obj = gson.fromJson(jsonObject , Object.class);

4.GsonBuilder的使用场景

GsonBuilder的用法很灵活,它最大的好处就是可以定制一个我们自己想要的格式的Json字符串,同时也要配合注解的使用,比如

a.限定某个成员变量在序列化的时候不出现。

b.序列化日期的时候设置日期格式。

c.当需要序列化的值为空时,采用null映射,否则会把该字段省略

d.将属性的首字母大写
等等。

在此就不再详细介绍了,你们可以参考官方文档详细研究。

新建的时候方法也很简单。

Gson gson = new GsonBuilder()
        .excludeFieldsWithoutExposeAnnotation() //a,配合注解@Expose使用,在成员变量上面加
        .setDateFormat("yyyy-MM-dd HH:mm:ss")//b
        .serializeNulls()//c
        .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) //d   
        .create();

接下来的用法都一样了

如有疑问请发我邮箱569133338@qq.com

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值