博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gson简明处理
阅读量:5835 次
发布时间:2019-06-18

本文共 2758 字,大约阅读时间需要 9 分钟。

原文地址:

关于为什么突然会使用Java,实际上还是公司要将之前原先Python开发的Elasticsearch搜索集成到到项目中,而必须在国庆前给出1个版本。真心的说,进度很赶,对于一个平时不怎么写Java的Pythoner来说,花了1天的时间把对应的功能完成的70%,不得不说是1个奇迹。

在Jest包中,有这么1个Gson的包,用于对JSON数据进行序列化处理。这里我们单独将其拿出来,稍微简单的介绍一下,以后遇到同样的问题的时候也不用慌。这里使用的gson版本为2.8.0
我们使用maven下载了对应的包后,首先进行如下的操作:

import com.google.gson.*;

序列化

接着我们实例化Gson类,并调用其toJson方法对1个对象进行序列化处理:

import java.util.*;...public class demo {    public static void main(String[] args){        Gson json = new Gson();        HashMap
map = new HashMap<>(); ArrayList
arr = new ArrayList<>(); arr.add("张三"); arr.add("李四"); map.put("person", arr); String str = json.toJson(map); System.out.println(str); }}

其结果如下所示:

{"person":["张三","李四"]}

可以说是1个非常简单的例子。但是上面的方式,对于数值为null的情况会忽略掉对应的键名,如下所示:

HashMap
map = new HashMap<>();ArrayList
arr = new ArrayList<>();arr.add("张三");arr.add("李四");map.put("person", arr);map.put("gender", null);String str = json.toJson(map);

其结果为:

{"person":["张三","李四"]}

此时我们可以使用如下的方式进行序列化:

GsonBuilder json = new GsonBuilder();String str = json.serializeNulls().create().toJson(map);

另外,默认的序列化是没有美化效果的,看起来不是很方便,此时我们可以添加setPrettyPrinting方法来设置其为美化的输出:

String str = json.serializeNulls().setPrettyPrinting().create().toJson(map);

相应的结果立即就变成了:

{  "gender": null,  "person": [    "张三",    "李四"  ]}

除此之外,我们还可以对类进行实例化,比如我们有如下1个简单的类:

class Person {    private String name = "张三";    private int age = 23;    private String gender = "男";        @Override    public String toString(){        return name + ":" + age + ":" + gender;    }}

接着我们再进行实例化处理:

Person person = new Person();String str = json.toJson(person);System.out.println(str);

其结果为:

{"name":"张三","age":23,"gender":"男"}

可以看到,对应类的属性都被实例化了。另外,在这里我们对类的toString进行了重载,也是1种序列化的方式。

另1个比较有意思的地方,可能就是使用注解的方式来进行序列化处理了,例如:

import com.google.gson.annotations.*;class Person {    @SerializedName("username")    @Expose(serialize = true)    private String name = "张三";    private int age = 23;    @Expose(serialize = true)    private String gender = "男";}...Person person = new Person();String str2 = json.serializeNulls().excludeFieldsWithoutExposeAnnotation().create().toJson(person);System.out.println(str2);

在这里我们只序列化name和gender这个2个属性,其中属性name序列化时候的名称为username,之后我们调用GsonBuilder进行处理可以得到:

{"username":"张三","gender":"男"}

反序列化

而对于反序列化处理,我们只需要使用fromJson函数即可,例如我们可以对之前的JSON数据进行反序列化处理:

Person info = json.create().fromJson(str2, Person.class);System.out.println(info);

由于我们之前重载了对应类的toString方法,因此其结果为:

张三:23:男

另1个就是对之前新建的HashMap进行反序列化处理:

HashMap
dict = json.create().fromJson(str, HashMap.class);System.out.println(dict);

其结果为:

{gender=null, person=[张三, 李四]}

通过反序列化,在调用Jest时对于返回的数据,我们就可以进行筛选,去除一些不需要的内容再序列化返回到前端。

而Gson还有一些其他的内容,比如对指定类型的序列化处理,这里就不叙述了,可以。

参考文章:

转载地址:http://duycx.baihongyu.com/

你可能感兴趣的文章
走近 Emacs
查看>>
Go 公布 2.0 设计草案:主打规模化和扩展性,支持泛型
查看>>
Deepin 操作系统联合创始人宣布离职
查看>>
Android RTL布局和双向字符集显示
查看>>
基于 Laravel 的在线点播系统 MeEdu v1.0 版本上线
查看>>
日本航空公司打造新型VR设备,让用户身临其境地感受旅游目的地 ...
查看>>
标签打印软件如何制作三角形合格证
查看>>
智慧教育,千军抢过“独木桥”
查看>>
PostgreSQL 任意字段数组合 AND\OR 条件,指定返回结果条数,构造测试数据算法举例 ...
查看>>
互联网大佬推荐的34本必读书 ,UI设计,产品经理推荐(附电子版下载方式) ...
查看>>
洛谷 P3183 BZOJ 4562 [HAOI2016]食物链
查看>>
resultMap自定义某个javaBean的封装规则代码
查看>>
社交系统ThinkSNS+安装部署演示
查看>>
bash shell 中数组使用举例
查看>>
阿里云云计算ACP认证重点梳理4—对象存储OSS
查看>>
Java并发编程:Callable、Future和FutureTask
查看>>
MySQL原生语句个人补漏
查看>>
2018 FDA获批医疗器械盘点,政策红利能否继续?
查看>>
网络攻防“三剑客”正式加盟墨者安全 担任首席安全顾问
查看>>
Android实战_note1(MyMirror_一款小型摄像处理的App)
查看>>