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