Gson使用指南(2)

2021-07-31 06:09:49 字數 3363 閱讀 5202

僅供學習使用

本次的主要內容:

自動方式

gson提供了fromjson()tojson()兩個直接用於解析和生成的方法,前者實現反序列化,後者實現了序列化。同時每個方法都提供了過載方法,我常用的總共有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 = "";

user user = new user();

jsonreader reader = new jsonreader(new stringreader(json));

reader.beginobject(); // throws ioexception

while (reader.hasnext())

}reader.endobject(); // throws ioexception

system.out.println(user.name); // 怪盜kidou

system.out.println(user.age); // 24

system.out.println(user.email); // [email protected]

其實自動方式最終都是通過jsonreader來實現的,如果第乙個引數是string型別,那麼gson會建立乙個stringreader轉換成流操作。

gson流式解析

自動方式

gson.tojson方法列表

所以啊,學會利用ide的自動完成是多麼重要這下知道了吧!

可以看出用紅框選中的部分就是我們要找的東西。

gson gson = new gson();

user user = new user("怪盜kidou",24,"[email protected]");

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

//

一般情況下gson類提供的 api已經能滿足大部分的使用場景,但我們需要更多更特殊、更強大的功能時,這時候就引入乙個新的類gsonbuilder

gsonbuilder從名上也能知道是用於構建gson例項的乙個類,要想改變gson預設的設定必須使用該類配置gson。

gsonbuilder用法

gson gson = new gsonbuilder()

//各種配置

.create(); //生成配置好的gson

gson在預設情況下是不動匯出值null的鍵的,如:

public

class

user

gson gson = new gson();

user user = new user("怪盜kidou",24);

system.out.println(gson.tojson(user)); //

可以看出,email欄位是沒有在json中出現的,當我們在除錯是、需要匯出完整的json串時或api接中要求沒有值必須用null時,就會比較有用。

使用方法:

gson gson = new gsonbuilder()

.serializenulls()

.create();

user user = new user("怪盜kidou", 24);

system.out.println(gson.tojson(user)); //

格式化輸出、日期時間及其它:

這些都比較簡單就不一一分開寫了。

gson gson = new gsonbuilder()

//序列化null

.serializenulls()

// 設定日期時間格式,另有2個過載方法

// 在序列化和反序化時均生效

.setdateformat("yyyy-mm-dd")

// 禁此序列化內部類

.disableinnerclassserialization()

//生成不可執行的json(多了 )]}' 這4個字元)

.generatenonexecutablejson()

//禁止轉義html標籤

.disablehtmlescaping()

//格式化輸出

.setprettyprinting()

.create();

注意:內部類(inner class)和巢狀類(nested class)的區別

這次文章就到這裡,歡迎提問互動,如有不對的地方請指正。

pojo與json的字段對映規則

你真的會用Gson嗎 Gson使用指南(二)

該系列其它文章 注 此系列基於gson 2.4。本次的主要內容 gson提供了fromjson 和tojson 兩個直接用於解析和生成的方法,前者實現反序列化,後者實現了序列化。同時每個方法都提供了過載方法,我常用的總共有5個。gson.tojson object gson.fromjson rea...

Ubuntu apt 使用指南

起初gnu linux系統中只有.tar.gz。使用者必須自己編譯他們想使用的每乙個程式。在debian出現之後,人們認為有必要在系統中新增 一種機制用來管理安裝在計算機上的軟體包。人們將這套系統稱為dpkg。至此著名的 package 首次在gnu linux上出現。不久之後紅帽子也 開始著手建立...

CImageList使用指南

1.綜述 在mfc 中cimagelist 類封裝了 影象列表控制項的功能,影象列表是乙個具有相同大小的 影象 可以是不同 型別 的集合,其主要用於 應用程式中大規模 圖示的儲存。該控制項是不可 見的,通常與其它如 clistbox ccombobox ccomboboxex ctabctrl 以及...