該系列其它文章
注:此系列基於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...