你真的会用Gson吗?Gson使用指南(二)
2017-02-12 00:00
555 查看
本文为作者根据日常使用结合Gson源码注释及wiki所作的原创内容,转载请注明出处。
该系列其它文章
你真的会用Gson吗?Gson使用指南(一)
你真的会用Gson吗?Gson使用指南(二)
你真的会用Gson吗?Gson使用指南(三)
你真的会用Gson吗?Gson使用指南(四)
注:此系列基于Gson 2.4。
上一篇文章 你真的会用Gson吗?Gson使用指南(一) 我们了解了Gson的基础用法,这次我们继续深入了解Gson的使用方法。
本次的主要内容:
Gson的流式反序列化
Gson的流式序列化
使用GsonBuilder导出null值、格式化输出、日期时间及其它小功能
Gson提供了
这是我在上一篇文章开头说的,但我到最后也一直没有是哪5个,这次我给列出来之后,你就知道这次讲的是哪个了。
好了,本节结束!
看第2、4行,Reader懂了吧
手动方式
手动的方式就是使用
其实自动方式最终都是通过
Gson流式解析
Gson.toJson方法列表
所以啊,学会利用IDE的自动完成是多么重要这下知道了吧!
可以看出用红框选中的部分就是我们要找的东西。
提示:
手动方式
提示:除了
GsonBuilder用法
Gson在默认情况下是不动导出值
可以看出,
使用方法:
格式化输出、日期时间及其它:
这些都比较简单就不一一分开写了。
注意:内部类(Inner Class)和嵌套类(Nested Class)的区别
这次文章就到这里,欢迎提问互动,如有不对的地方请指正。
基于
基于访问修饰符
基于版本
自定义规则
POJO与JSON的字段映射规则
该系列其它文章
你真的会用Gson吗?Gson使用指南(一)
你真的会用Gson吗?Gson使用指南(二)
你真的会用Gson吗?Gson使用指南(三)
你真的会用Gson吗?Gson使用指南(四)
注:此系列基于Gson 2.4。
上一篇文章 你真的会用Gson吗?Gson使用指南(一) 我们了解了Gson的基础用法,这次我们继续深入了解Gson的使用方法。
本次的主要内容:
Gson的流式反序列化
Gson的流式序列化
使用GsonBuilder导出null值、格式化输出、日期时间及其它小功能
一、Gson的流式反序列化
自动方式Gson提供了
fromJson()和
toJson()两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化。同时每个方法都提供了重载方法,我常用的总共有5个。
这是我在上一篇文章开头说的,但我到最后也一直没有是哪5个,这次我给列出来之后,你就知道这次讲的是哪个了。
Gson.toJson(Object); Gson.fromJson(Reader,Class); Gson.fromJson(String,Class); Gson.fromJson(Reader,Type); Gson.fromJson(String,Type);
好了,本节结束!
看第2、4行,Reader懂了吧
手动方式
手动的方式就是使用
stream包下的
JsonReader类来手动实现反序列化,和Android中使用pull解析XML是比较类似的。
String json = "{\"name\":\"怪盗kidou\",\"age\":\"24\"}"; User user = new User(); JsonReader reader = new JsonReader(new StringReader(json)); reader.beginObject(); // throws IOException while (reader.hasNext()) { String s = reader.nextName(); switch (s) { case "name": user.name = reader.nextString(); break; case "age": user.age = reader.nextInt(); //自动转换 break; case "email": user.email = reader.nextString(); break; } } reader.endObject(); // throws IOException System.out.println(user.name); // 怪盗kidou System.out.println(user.age); // 24 System.out.println(user.email); // ikidou@example.com
其实自动方式最终都是通过
JsonReader来实现的,如果第一个参数是
String类型,那么Gson会创建一个
StringReader转换成流操作。
Gson流式解析
二、Gson的流式序列化
自动方式Gson.toJson方法列表
所以啊,学会利用IDE的自动完成是多么重要这下知道了吧!
可以看出用红框选中的部分就是我们要找的东西。
提示:
OutputStream和
Writer都实现了
Appendable接口。
Gson gson = new Gson(); User user = new User("怪盗kidou",24,"ikidou@example.com"); gson.toJson(user,System.out); // 写到控制台
手动方式
JsonWriter writer = new JsonWriter(new OutputStreamWriter(System.out)); writer.beginObject() // throws IOException .name("name").value("怪盗kidou") .name("age").value(24) .name("email").nullValue() //演示null .endObject(); // throws IOException writer.flush(); // throws IOException //{"name":"怪盗kidou","age":24,"email":null}
提示:除了
beginObject、
endObject还有
beginArray和
endArray,两者可以相互嵌套,注意配对即可。
beginArray后不可以调用
name方法,同样
beginObject后在调用
value之前必须要调用
name方法。
三、 使用GsonBuilder导出null值、格式化输出、日期时间
一般情况下Gson类提供的 API已经能满足大部分的使用场景,但我们需要更多更特殊、更强大的功能时,这时候就引入一个新的类
GsonBuilder。
GsonBuilder从名上也能知道是用于构建Gson实例的一个类,要想改变Gson默认的设置必须使用该类配置Gson。
GsonBuilder用法
Gson gson = new GsonBuilder() //各种配置 .create(); //生成配置好的Gson
Gson在默认情况下是不动导出值
null的键的,如:
public class User { //省略其它 public String name; public int age; public String email; }
Gson gson = new Gson(); User user = new User("怪盗kidou",24); System.out.println(gson.toJson(user)); //{"name":"怪盗kidou","age":24}
可以看出,
使用方法:
Gson gson = new GsonBuilder() .serializeNulls() .create(); User user = new User("怪盗kidou", 24); System.out.println(gson.toJson(user)); //{"name":"怪盗kidou","age":24,"email":null}
格式化输出、日期时间及其它:
这些都比较简单就不一一分开写了。
Gson gson = new GsonBuilder() //序列化null .serializeNulls() // 设置日期时间格式,另有2个重载方法 // 在序列化和反序化时均生效 .setDateFormat("yyyy-MM-dd") // 禁此序列化内部类 .disableInnerClassSerialization() //生成不可执行的Json(多了 )]}' 这4个字符) .generateNonExecutableJson() //禁止转义html标签 .disableHtmlEscaping() //格式化输出 .setPrettyPrinting() .create();
注意:内部类(Inner Class)和嵌套类(Nested Class)的区别
这次文章就到这里,欢迎提问互动,如有不对的地方请指正。
下篇文章内容提要
字段过滤的几种方法基于
@Expose注解
基于访问修饰符
基于版本
自定义规则
POJO与JSON的字段映射规则
相关文章推荐
- Gson解析使用指南
- 你真的会用Gson吗?Gson使用指南(二)
- Gson使用指南(二)
- 你真的会用Gson吗?Gson使用指南(三)
- 你真的会用Gson吗?Gson使用指南(二)
- Google的JSON包GSON使用指南
- Gson使用指南(3)
- 你真的会用Gson吗?Gson使用指南(四)
- 你真的会用Gson吗?Gson使用指南(三)
- Gson使用指南(2)
- 你真的会用Gson吗?Gson使用指南(三)
- Gson使用指南
- Gson使用指南
- Gson使用指南(一)
- 你真的会用Gson吗?Gson使用指南(一)
- 你真的会用Gson吗?Gson使用指南(一)
- Gson使用指南
- 你真的会用Gson吗?Gson使用指南(四)
- 你真的会用Gson吗?Gson使用指南(一)
- Gson使用指南(1)