本次的主要内容:
- 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);
好了,本节结束!
手动方式
手动的方式就是使用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的流式序列化
自动方式
所以啊,学会利用IDE的自动完成是多么重要这下知道了吧!
可以看出用红框选中的部分就是我们要找的东西。
提示:PrintStream
(System.out) 、StringBuilder
、StringBuffer
和*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}
可以看出,email
字段是没有在json中出现的,当我们在调试是、需要导出完整的json串时或API接中要求没有值必须用Null时,就会比较有用。
使用方法:
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)的区别
相关推荐
2. **JSON字符串到对象的反序列化**:同样,Gson提供了`fromJson()`方法,可以从JSON字符串创建一个或多个Java对象。 ```java YourObject yourObject = new Gson().fromJson(jsonString, YourObject.class); ```...
介绍:Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. 压缩包里有以下文件: ...
2. **注解支持**:Gson支持使用Java注解来定制序列化和反序列化的规则。例如,`@Expose`注解可以标记哪些字段需要被序列化或反序列化,`@SerializedName`可以重命名JSON字段名,以适应不同的API规范。 3. **复杂...
2. **Fastjson vs Gson** Fastjson是阿里巴巴提供的库,速度上可能优于Gson,但在某些复杂的序列化场景下,Gson可能更胜一筹。 **四、Gson的安装与引入** Gson作为独立的JAR包,可以通过Maven或Gradle等构建工具...
使用Gson,你可以通过`Gson().toJson()`方法将Java对象转化为JSON字符串,通过`new Gson().fromJson()`方法将JSON字符串反序列化为Java对象。 例如: ```java Person person = new Person("John", "Doe"); String ...
GSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串...
2. **JSON到对象**:Gson同样支持将JSON字符串解析成Java对象,这可以通过`Gson().fromJson()`实现。例如,将上面的JSON字符串还原为Person对象: ```java Person parsedPerson = new Gson().fromJson(jsonString...
json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。
Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 下面是几个小例子 1. toJson() example Java 代码 收藏代码...
包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...
2. Gson默认不处理日期,需要自定义类型适配器进行日期的序列化和反序列化。 3. 默认情况下,Gson会忽略非公开(private)的字段,如果需要序列化这些字段,可以使用`@Expose`注解。 总的来说,Google-Gson 2.2.4是...
赠送jar包:gson-2.8.0.jar; 赠送原API文档:gson-2.8.0-javadoc.jar; 赠送源代码:gson-2.8.0-sources.jar; 赠送Maven依赖信息文件:gson-2.8.0.pom; 包含翻译后的API文档:gson-2.8.0-javadoc-API文档-中文...
赠送jar包:gson-2.8.6.jar; 赠送原API文档:gson-2.8.6-javadoc.jar; 赠送源代码:gson-2.8.6-sources.jar; 赠送Maven依赖信息文件:gson-2.8.6.pom; 包含翻译后的API文档:gson-2.8.6-javadoc-API文档-中文...
标题中的“gson的jar包”指的是Gson库的二进制发行版,通常以JAR(Java Archive)文件的形式提供。JAR文件是Java平台上的可执行文件,包含了编译后的类文件和其他资源,便于在Java环境中运行或作为依赖引入项目。 ...
2. **gson-2.8.1-sources.jar**:这是一个包含了Gson库源代码的文件,对于开发者来说极其宝贵。它允许开发者查看和学习Gson的内部实现,便于理解其工作原理,调试代码,甚至对库进行扩展或定制。源码中包含了所有的...
Gson JAR包是Google推出的一款功能强大的Java库,它主要用于在Java对象和JSON格式数据之间进行转换。Gson库提供了简单而直观的API,使得开发者可以轻松地将Java对象序列化为JSON格式的字符串,或者将JSON字符串反...
Gson是Google开发的一款Java库,它能够将Java对象转换为...正确引入Gson的jar文件,无论是通过手动添加还是构建工具配置,都是使用Gson库的第一步。通过熟练掌握Gson,你可以提升项目中JSON数据处理的效率和灵活性。
2. 列表或其他集合类型反序列化: ```java List<Person> ps = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType()); for (Person p : ps) { System.out.println(p.toString()); } ``` 在这个...
截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了
在Java开发中,Gson库是Google提供的一款强大的JSON处理工具,它允许我们将Java对象转换为JSON字符串,反之亦然。本示例"GsonDemo"将深入探讨如何使用Gson库来解析JSON数据。JSON(JavaScript Object Notation)是一...