之前翻譯了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成功的映射了所有的屬性:
