内容简介:关于为什么突然会使用Java,实际上还是公司要将之前原先Python开发的Elasticsearch搜索集成到到项目中,而必须在国庆前给出1个版本。真心的说,进度很赶,对于一个平时不怎么写Java的Pythoner来说,花了1天的时间把对应的功能完成的70%,不得不说是1个奇迹。在Jest包中,有这么1个Gson的包,用于对JSON数据进行序列化处理。这里我们单独将其拿出来,稍微简单的介绍一下,以后遇到同样的问题的时候也不用慌。这里使用的gson版本为我们使用maven下载了对应的包后,首先进行如下的操作
关于为什么突然会使用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<String,Object> map = new HashMap<>(); ArrayList<String> arr = new ArrayList<>(); arr.add("张三"); arr.add("李四"); map.put("person", arr); String str = json.toJson(map); System.out.println(str); } }
其结果如下所示:
{"person":["张三","李四"]}
可以说是1个非常简单的例子。但是上面的方式,对于数值为null的情况会忽略掉对应的键名,如下所示:
HashMap<String,Object> map = new HashMap<>(); ArrayList<String> 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还有一些其他的内容,比如对指定类型的序列化处理,这里就不叙述了,可以 参考 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
解构产品经理:互联网产品策划入门宝典
电子工业出版社 / 2018-1 / 65
《解构产品经理:互联网产品策划入门宝典》以作者丰富的职业背景及著名互联网公司的工作经验为基础,从基本概念、方法论和工具的解构入手,配合大量正面或负面的案例,完整、详细、生动地讲述了一个互联网产品经理入门所需的基础知识。同时,在此基础上,将这些知识拓展出互联网产品策划的领域,融入日常工作生活中,以求职、沟通等场景为例,引导读者将知识升华为思维方式。 《解构产品经理:互联网产品策划入门宝典》适合......一起来看看 《解构产品经理:互联网产品策划入门宝典》 这本书的介绍吧!