资讯专栏INFORMATION COLUMN

Gson简明处理

wangbjun / 736人阅读

摘要:在包中有这么个的包用于对数据进行序列化处理。而还有一些其他的内容比如对指定类型的序列化处理这里就不叙述了可以参考。

原文地址:http://blog.52sox.com/use-gso...

关于为什么突然会使用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://www.javadoc.io/doc/com...
https://www.cnblogs.com/mafly...
https://www.cnblogs.com/majay...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77213.html

相关文章

  • 追踪解析Gson源码(1)

    摘要:版本版本简介是谷歌开源的解析工具。其实几款产品的差别都很细微,有谷歌的信仰加成,所以在这里进行一次源码分析。至于和会在后续进行追踪。 零 前期准备 0 FBI WARNING 文章异常啰嗦且绕弯。 1 版本 Gson 版本 : gson 2.8.5 IDE : idea 2018.3 2 Gson 简介 Gson 是谷歌开源的 java json 解析工具。市场上同类的开源产品还有 F...

    sewerganger 评论0 收藏0
  • gson-plugin深入源码分析(三)

    摘要:六修改内部类的方法这个的方法是对类型的数据进行解析,我们判断输入的数据类型不是类型,就直接跳过解析,核心是在方法中插入方法。每一个类每一个内部类每一个匿名内部类,都会生成一个独立的文件,如。 一、项目地址 项目地址:github-gson-plugin 二、ReaderTools解析 /** * Created by tangfuling on 2018/10/23. */ pu...

    oujie 评论0 收藏0

发表评论

0条评论

wangbjun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<