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

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

Gson依賴

該指南是實(shí)踐性的并會(huì)立刻實(shí)現(xiàn)一些序列化。因?yàn)榇蟛糠值淖x者來自Android開發(fā)者,因此這是專門為你們定制的,但是Gson可以用于任何的Java環(huán)境。在我們開始之前,我們得將Gson庫引進(jìn)項(xiàng)目。在我寫該文檔時(shí),最新版本為2.8.2。如果你使用的是Gradle,請(qǐng)?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>  

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

基本的Java-JSON序列化

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

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

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

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

我們的Android或者Java程序需要將一個(gè)UserSimple對(duì)象轉(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對(duì)象:

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

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

Gson gson = new Gson();  

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

String userJson = gson.toJson(userObject);  

userJson包含如下值:

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

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

基本的JSON-Java反序列化

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

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

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

Gson gson = new Gson();  

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

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

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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容