`

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
分享到:
评论

相关推荐

    第二十九讲、刷新微博

    在本讲“第二十九讲、刷新微博”中,我们将探讨如何实现微博应用的刷新功能,特别是在Android或iOS等移动平台上。这一功能对于社交媒体应用来说至关重要,因为它允许用户实时获取最新的信息流,保持与社交网络的同步...

    Ivan老师新浪微博开发第六讲源代码

    《Ivan老师新浪微博开发第六讲源代码》 在这一讲中,Ivan老师分享了他在开发新浪微博应用时的部分源代码,特别关注的是基于Android平台的微博客户端开发。这个压缩包包含了一个名为"IblogV3.0"的项目,可能是该应用...

    疯狂android讲义源代码

    12. **Android框架与库**:源码还可能涉及到一些热门的Android第三方库,如GreenDao、ButterKnife、Gson等,让开发者了解如何引入和利用这些库提升开发效率。 通过深入研究这个源码包,读者不仅可以巩固理论知识,...

    Android讲义33讲

    15. **第三方库集成**:如Retrofit、Gson、ButterKnife等,这些库能提高开发效率并增强应用功能。 16. **Gradle构建系统**:解析Gradle的构建脚本和依赖管理,如何配置项目结构以及如何自定义构建过程。 17. **...

    讲json字符串保存在windo系统中,java生成exe文件

    在Java中,处理JSON字符串主要依赖于一些第三方库,如Jackson、Gson或org.json等。 Java生成exe文件是将Java应用程序转换为可执行文件的过程,使得非Java环境的用户也能运行程序。这通常通过Java的打包工具,如JAR...

    《Android开发权威指南》随书源码

    随书源码是作者为了辅助读者更好地理解和实践书中所讲内容而提供的实际代码示例。这些源码涵盖了Android应用开发的关键技术点,包括用户界面设计、数据存储、网络通信、多媒体处理、多线程以及性能优化等多个领域。 ...

    json实战1源码.zip

    本教程将通过"Android入门第六讲02-JSON实战1源码"来探讨如何在Android应用中实现JSON的解析和使用。 首先,我们需要了解JSON的基本结构。JSON数据可以是对象或数组,对象由键值对组成,键用引号括起来,值可以是...

Global site tag (gtag.js) - Google Analytics