Gson教程一(譯):Java-JSON的序列化和反序列化

之前翻譯了Gson User Guide我抠,覺得很多用法還不是很清楚,特翻譯Gson Tutorial Series這一系列不錯(cuò)的教程决记。這里是該系列的首篇摧冀。

Gson依賴

該指南是實(shí)踐性的并會立刻實(shí)現(xiàn)一些序列化。因?yàn)榇蟛糠值淖x者來自Android開發(fā)者系宫,因此這是專門為你們定制的索昂,但是Gson可以用于任何的Java環(huán)境。在我們開始之前扩借,我們得將Gson庫引進(jìn)項(xiàng)目椒惨。在我寫該文檔時(shí),最新版本為2.8.2潮罪。如果你使用的是Gradle框产,請?zhí)砑酉滦写a:

compile 'com.google.code.gson:gson:2.8.2' 

如果你使用的是Maven,你可以添加下面的依賴:

<dependencies>  
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
        <scope>compile</scope>
    </dependency>
</dependencies>  

對于其他開發(fā)者错洁,你可以在其官方Github倉庫下載相應(yīng)的jar包秉宿。

基本的Java-JSON序列化

讓我們做一些序列化工作吧!Serialization在Gson中的意思是將一個(gè)Java對象映射為相應(yīng)的JSON表達(dá)方式屯碴。在稍后的教程中描睦,我們會采用稍微復(fù)雜一點(diǎn)的數(shù)據(jù),但是現(xiàn)在导而,我們以一個(gè)相當(dāng)簡單的UserSimplement對象開始:

public class UserSimple {  
    String name;
    String email;
    int age;
    boolean isDeveloper;
}

這個(gè)user對象有四個(gè)屬性:

  • user的name是一個(gè)字符串類型
  • user的email也是一個(gè)字符串類型
  • user的age是一個(gè)整型忱叭,意味著年齡存儲的是年數(shù)(比如26歲隔崎,而不是準(zhǔn)確的生日日期!)
  • 最后的布爾類型isDeveloper表示是否是一個(gè)開發(fā)者

我們的Android或者Java程序需要將一個(gè)UserSimple對象轉(zhuǎn)換為相應(yīng)的JSON形式韵丑。
假設(shè)我們希望成員名稱相同爵卒,我們希望該博客的作者Norman的JSON形式如下:

{
  "name": "Norman",
  "email": "norman@futurestud.io",
  "age": 26,
  "isDeveloper": true
}

讓我們看一下如何使用Gson完成此一轉(zhuǎn)換。首先撵彻,我們需要為Norman創(chuàng)建一個(gè)Java對象:

UserSimple userObject = new UserSimple(  
    "Norman", 
    "norman@futurestud.io", 
    26, 
    true
);

完成序列化钓株,需要一個(gè)Gson對象。構(gòu)造器提供了一種簡單的方式:

Gson gson = new Gson();  

接下來陌僵,我們需要調(diào)用toJson以及傳入U(xiǎn)serSimple對象:

String userJson = gson.toJson(userObject);  

userJson包含如下值:

{
  "age": 26,
  "email": "norman@futurestud.io",
  "isDeveloper": true,
  "name": "Norman"
}

Gson改變了屬性之間的順序(以字母順序排序)轴合,但是內(nèi)容是相同的!注意Gson所希望的類型碗短。String值被""包裹受葛,而整型值不被包裹。我們不必為JSON的諸多對象或者復(fù)制單個(gè)成員而煩惱偎谁。Gson通過一個(gè)調(diào)用足以映射整個(gè)對象总滩。這對于我們處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)會是相當(dāng)有幫助的。在我們繼續(xù)深入之前巡雨,我們得轉(zhuǎn)向另一個(gè)方向咳秉。Gson是否能夠基于JSON創(chuàng)建一個(gè)Java對象?

基本的JSON-Java反序列化

首先鸯隅,我們需要穿件一個(gè)字符串澜建,該字符串包含上面提到的JSON:

String userJson = "{'age':26,'email':'norman@futurestud.io','isDeveloper':true,'name':'Norman'}";  

我們在這里使用'而非"以避免使用大量的"轉(zhuǎn)義。然而蝌以,無論哪種方式炕舵。下一步就如你可能猜想的,創(chuàng)建一個(gè)Gson實(shí)例:

Gson gson = new Gson();  

最后我們需要使用fromJson()將JSON映射為一個(gè)Java對象:

UserSimple userObject = gson.fromJson(userJson, UserSimple.class);  

注意我們必須傳遞的第二個(gè)參數(shù)為我們希望的Java對象跟畅。否則咽筋,Gson不知道它該映射到哪里。它并不是一個(gè)魔術(shù)師徊件!
如果我們使用debugger并查看userObject的結(jié)果奸攻,我們發(fā)現(xiàn)Gson成功的映射了所有的屬性:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虱痕,隨后出現(xiàn)的幾起案子睹耐,更是在濱河造成了極大的恐慌,老刑警劉巖部翘,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硝训,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窖梁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門赘风,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纵刘,你說我怎么就攤上這事邀窃。” “怎么了假哎?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵瞬捕,是天一觀的道長。 經(jīng)常有香客問我位谋,道長山析,這世上最難降的妖魔是什么堰燎? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任掏父,我火速辦了婚禮,結(jié)果婚禮上秆剪,老公的妹妹穿的比我還像新娘赊淑。我一直安慰自己,他們只是感情好仅讽,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布陶缺。 她就那樣靜靜地躺著,像睡著了一般洁灵。 火紅的嫁衣襯著肌膚如雪饱岸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天徽千,我揣著相機(jī)與錄音苫费,去河邊找鬼。 笑死双抽,一個(gè)胖子當(dāng)著我的面吹牛百框,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牍汹,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼铐维,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慎菲?” 一聲冷哼從身側(cè)響起嫁蛇,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎露该,沒想到半個(gè)月后棠众,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年闸拿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了空盼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡新荤,死狀恐怖揽趾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苛骨,我是刑警寧澤篱瞎,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站痒芝,受9級特大地震影響俐筋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜严衬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一澄者、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧请琳,春花似錦粱挡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至竖慧,卻和暖如春嫌套,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背圾旨。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工踱讨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碳胳。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓勇蝙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挨约。 傳聞我的和親對象是個(gè)殘疾皇子味混,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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

  • 原文鏈接:Getting Started with Java-JSON Serialization & Deser...
    簽到錢就到閱讀 9,594評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)诫惭,斷路器翁锡,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 據(jù)萊斯特當(dāng)?shù)孛襟w水星報(bào)報(bào)道,萊斯特城主帥莎士比亞被球隊(duì)解雇夕土。隨后馆衔,BBC瘟判、天空體育、每日郵報(bào)和鏡報(bào)等媒體也都確認(rèn)了...
    偽球迷不懂球閱讀 300評論 0 0
  • 社會本就是一個(gè)江湖,在江湖就要守江湖的規(guī)矩减细。我就是在江湖中的一個(gè)人匆瓜,在我所經(jīng)歷的江湖爾虞我詐各種心機(jī),反間計(jì)充斥著...
    樂無彩閱讀 342評論 0 0
  • 單例模式未蝌,這個(gè)我曾經(jīng)以為掌握的很不錯(cuò)了的DesignPattern驮吱,最近因?yàn)槲以诳匆坏烂嬖囶}的時(shí)候再次來到了我的面...
    jsy_hello閱讀 1,009評論 2 1