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

2021-07-15 13:26:20 字數 3133 閱讀 1140

該系列其它文章

注:此系列基於gson 2.4。

本次的主要內容:

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

;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.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)的區

你真的會用GOOGLE嗎

平時很多人用google搜尋引擎搜尋資訊,經常搜尋 成千上萬的網頁,檢視幾頁就沒耐心找下去了。在google上搜尋資訊,不只輸入希望搜尋的片語這麼簡單,這樣是無法得到做好的搜尋結果的。google 為使用者提供了很多基本搜尋語法,熟練的運用google搜尋,將很快的搜到我們需要的結果。短語搜尋 布林...

Markdown 你真的會用嗎?

markdown指南 markdown basics 我有幾張阿里雲幸運券分享給你,用券購買或者公升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。我常用如 橫線分隔符 超級鏈結 markdown 常遇到的問題 縮排 每段文章我都會習慣性地做首行縮排,但如果直...

你真的會用scanf嗎?

scanf使用技巧1 456 7894 54如何將以上數字輸入陣列呢,只需要用下面這段 scanf d arr i 實際上在鍵盤上輸入時,鍵入4 空格 5 空格 6 空格 scanf使用技巧2 當我們有有乙個很大的陣列需要輸入時,而每次輸入元素的個數都不一樣,這時該怎麼辦呢?使用下面這段 即可 in...