`

Gson第二讲

    博客分类:
  • json
阅读更多

本次的主要内容:

  • 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的自动完成是多么重要这下知道了吧!
可以看出用红框选中的部分就是我们要找的东西。

提示:PrintStream(System.out) 、StringBuilderStringBuffer*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}

提示:除了beginObjectendObject还有beginArrayendArray,两者可以相互嵌套,注意配对即可。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)的区别

 

原文链接:http://www.jianshu.com/p/c88260adaf5e

1
0
分享到:
评论

相关推荐

    om.google.gson.Gson Gson maven依赖

    2. **JSON字符串到对象的反序列化**:同样,Gson提供了`fromJson()`方法,可以从JSON字符串创建一个或多个Java对象。 ```java YourObject yourObject = new Gson().fromJson(jsonString, YourObject.class); ```...

    GSON JAR包 最新包和历史包 gson-2.10.1

    介绍: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. 压缩包里有以下文件: ...

    com.google.gson.Gson 2.8.1 2.8.2 jar包 gson

    2. **注解支持**:Gson支持使用Java注解来定制序列化和反序列化的规则。例如,`@Expose`注解可以标记哪些字段需要被序列化或反序列化,`@SerializedName`可以重命名JSON字段名,以适应不同的API规范。 3. **复杂...

    gson jar包下载

    2. **Fastjson vs Gson** Fastjson是阿里巴巴提供的库,速度上可能优于Gson,但在某些复杂的序列化场景下,Gson可能更胜一筹。 **四、Gson的安装与引入** Gson作为独立的JAR包,可以通过Maven或Gradle等构建工具...

    json解析 gson fastjson

    使用Gson,你可以通过`Gson().toJson()`方法将Java对象转化为JSON字符串,通过`new Gson().fromJson()`方法将JSON字符串反序列化为Java对象。 例如: ```java Person person = new Person("John", "Doe"); String ...

    gson-2.8.5版本的jar包

    GSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串...

    Gson的2.2.4jar

    2. **JSON到对象**:Gson同样支持将JSON字符串解析成Java对象,这可以通过`Gson().fromJson()`实现。例如,将上面的JSON字符串还原为Person对象: ```java Person parsedPerson = new Gson().fromJson(jsonString...

    com.google.gson.Gson.jar

    json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。

    gson 使用Gson将Java对象转换为JSON

    Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) fromJson() – 转换JSON到java对象 下面是几个小例子 1. toJson() example Java 代码 收藏代码...

    googleGson JsonObject json转换包

    包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...

    Google-Gson 2.2.4

    2. Gson默认不处理日期,需要自定义类型适配器进行日期的序列化和反序列化。 3. 默认情况下,Gson会忽略非公开(private)的字段,如果需要序列化这些字段,可以使用`@Expose`注解。 总的来说,Google-Gson 2.2.4是...

    gson-2.8.0-API文档-中文版.zip

    赠送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文档-中文...

    gson-2.8.6-API文档-中文版.zip

    赠送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包”指的是Gson库的二进制发行版,通常以JAR(Java Archive)文件的形式提供。JAR文件是Java平台上的可执行文件,包含了编译后的类文件和其他资源,便于在Java环境中运行或作为依赖引入项目。 ...

    Gson-2.8.1的官方jar包合集【gson-2.8.1.jar,gson-2.8.1-sources.jar】

    2. **gson-2.8.1-sources.jar**:这是一个包含了Gson库源代码的文件,对于开发者来说极其宝贵。它允许开发者查看和学习Gson的内部实现,便于理解其工作原理,调试代码,甚至对库进行扩展或定制。源码中包含了所有的...

    gson各个版本 jar 包下载

    Gson JAR包是Google推出的一款功能强大的Java库,它主要用于在Java对象和JSON格式数据之间进行转换。Gson库提供了简单而直观的API,使得开发者可以轻松地将Java对象序列化为JSON格式的字符串,或者将JSON字符串反...

    gson 需要的jar

    Gson是Google开发的一款Java库,它能够将Java对象转换为...正确引入Gson的jar文件,无论是通过手动添加还是构建工具配置,都是使用Gson库的第一步。通过熟练掌握Gson,你可以提升项目中JSON数据处理的效率和灵活性。

    Gson简要使用笔记

    2. 列表或其他集合类型反序列化: ```java List<Person> ps = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType()); for (Person p : ps) { System.out.println(p.toString()); } ``` 在这个...

    com.google.gson.Gson 2.8.5 jar包

    截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了

    gsondemo解析json

    在Java开发中,Gson库是Google提供的一款强大的JSON处理工具,它允许我们将Java对象转换为JSON字符串,反之亦然。本示例"GsonDemo"将深入探讨如何使用Gson库来解析JSON数据。JSON(JavaScript Object Notation)是一...

Global site tag (gtag.js) - Google Analytics