僅供學習使用
本次的主要內容:
自動方式
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 以及...