Andriod中Gson使用

Gson使用

參考你真的會用Gson嗎?Gson使用指南

在Android中使用Gson寓落,先在Compile中加入編譯包
compile 'com.google.code.gson:gson 2.8.0'
可以去Gson的github官網(wǎng)查看最新版本

gson兩個主要的方法,一個是gson.toJson()折柠,一個是gson.FromJson()经宏,兩個方法都是簡潔易懂良蛮。

從對象變成Json字符串

Gson gson = new Gson();
Object obj = new Object();
String jsonString = gson.toJson(obj);

從Json字符串轉(zhuǎn)變?yōu)镺bj對象

String input;
Gson gson = new Gson();
Object obj = gson.from(input,Object.class);

1. json字段調(diào)整

有時候json中的field不能完全和自己的class對應(yīng)上哪怔,這時候就需要修改字段灶伊。但是有時候弥鹦,前端后端不同語言寫的肚逸,風(fēng)格就是有差異,就在字段前面使用:

@SerializedName("email_address")
publicString emailAddress;

這樣即使在字符串中得到的是加下劃線的彬坏,依然能夠?qū)?yīng)到Bean中朦促。注意:from和to都將是注解中的名字。
有這樣一種情況栓始,有的系統(tǒng)是這種务冕,有的系統(tǒng)是那種,要能夠全部兼容幻赚,那么Gson也提供了一種注解:

@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
public String emailAddress;

有備用的禀忆,在序列化時會按照emailAddress來,在反序列化時會優(yōu)先從value中找落恼,找不到再從alternate中找箩退。

2. Gson解析list

(1)如果想解析為數(shù)組

Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
String[] strings = gson.fromJson(jsonArray, String[].class);

(2)如果想解析為List,因為java為偽泛型佳谦,如下可以做:

Gson gson = new Gson();
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
List<String> stringList = gson.fromJson(jsonArray, new TypeToken<List<String>>() {}.getType());

3乏德、Gson有五種方法:

Gson.toJson(Object);
Gson.fromJson(Reader,Class);
Gson.fromJson(String,Class);
Gson.fromJson(Reader,Type);
Gson.fromJson(String,Type);

這樣就能在讀文件啥的流的過程中進(jìn)行Gson解析了,不過在Rxjava和retrofit的框架中已經(jīng)用上了Gson的流操作吠昭,不用自己麻煩了喊括。

4、Gson Builder用法

Gson gson = new GsonBuilder()
               //各種配置
               .create();

比如:
添加.serializeNulls()將所有沒有值的field賦上null
添加.excludeFieldsWithoutExposeAnnotation()矢棚,只有field前面有@Expose注解的才會被序列化
添加.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.STATIC, Modifier.PRIVATE)排除掉final郑什,static,private字段

5蒲肋、Adapter

貼上一個現(xiàn)成的Gson配置

 public static final Gson GSON_DEFAULT = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
            .registerTypeAdapter(User.class, new UserTypeAdapter())
            .registerTypeAdapterFactory(new CustomTypeAdapterFactory())
            .enableComplexMapKeySerialization()
            .create();

其中

.registerTypeAdapter(User.class, new UserTypeAdapter())

對個別calss作操作蘑拯,UserTypeAdapter()類內(nèi)部進(jìn)行該類的序列化與反序列化的定制钝满,通過內(nèi)部覆寫readwrite方法,達(dá)到定制的要求申窘。

6弯蚜、GsonAdapterFactory

CustomTypeAdapterFactory就是自己的adapterFactory
如果用戶有很多的類需要定義剃法,為了避免在gson的配置中顯示太多的registerTypeAdapter碎捺,gson就采用了將所有adapter集中在一個factory類中的方法。
然后在Factory的creat方法中完成操作贷洲。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末收厨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子优构,更是在濱河造成了極大的恐慌诵叁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钦椭,死亡現(xiàn)場離奇詭異拧额,居然都是意外死亡,警方通過查閱死者的電腦和手機彪腔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門侥锦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漫仆,你說我怎么就攤上這事±峄希” “怎么了盲厌?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祸泪。 經(jīng)常有香客問我吗浩,道長,這世上最難降的妖魔是什么没隘? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任懂扼,我火速辦了婚禮,結(jié)果婚禮上右蒲,老公的妹妹穿的比我還像新娘阀湿。我一直安慰自己,他們只是感情好瑰妄,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布陷嘴。 她就那樣靜靜地躺著,像睡著了一般间坐。 火紅的嫁衣襯著肌膚如雪灾挨。 梳的紋絲不亂的頭發(fā)上邑退,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音劳澄,去河邊找鬼地技。 笑死,一個胖子當(dāng)著我的面吹牛秒拔,可吹牛的內(nèi)容都是我干的莫矗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溯警,長吁一口氣:“原來是場噩夢啊……” “哼趣苏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梯轻,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤食磕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喳挑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彬伦,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年伊诵,在試婚紗的時候發(fā)現(xiàn)自己被綠了单绑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡曹宴,死狀恐怖搂橙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笛坦,我是刑警寧澤区转,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站版扩,受9級特大地震影響废离,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜礁芦,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一蜻韭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柿扣,春花似錦肖方、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娩践,卻和暖如春活翩,著一層夾襖步出監(jiān)牢的瞬間烹骨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工材泄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沮焕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓拉宗,卻偏偏與公主長得像峦树,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旦事,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.概述2.Gson的目標(biāo)3.Gson的性能和擴展性4.Gson的使用者5.如何使用Gson 通過Maven來使用...
    人失格閱讀 14,234評論 2 18
  • 為了更好的學(xué)習(xí)Gson魁巩,特將Gson User Guide翻譯如下。由于本人英文水平有限姐浮,如有錯誤谷遂,還請指正,謝謝...
    WeberLisper閱讀 6,811評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理卖鲤,服務(wù)發(fā)現(xiàn)肾扰,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 今天談到的“流水式閱讀”——不是要百分之百的復(fù)制,而是邂逅1%的收獲区匣,跟生活何其相似偷拔。 不管是做了事情,還是經(jīng)歷了...
    靜心觀情閱讀 279評論 4 5
  • 生活不是一場賽跑亏钩, 而是一次旅行莲绰, 要懂得好好欣賞沿途的風(fēng)景。 這個世界铸屉,對著你笑的人太多太多钉蒲。 真心包容你的切端,太...
    沉默_611c閱讀 237評論 0 0