翻譯:簽到錢就到
前面的兩篇博客,我們展示了如何用Gson映射List數(shù)據(jù)和Java Map。本文中,你將要學(xué)習(xí)如何序列化(反序列化)Java集合(Set)。
當(dāng)然,這不是我們Gson系列里唯一的一篇文章,如果你對(duì)其他的主題感興趣,可以看一下我們的大綱:
Gson系列概覽
- 用java-JSON實(shí)現(xiàn)序列化合反序列化
- 嵌套對(duì)象的映射
- 數(shù)組和列表對(duì)象的映射
- Map的映射
- Set的映射
- 空值的映射
- Gson Model Annotations — How to Ignore Fields with @Expose
- Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
- Gson Builder — Basics & Naming Policies
- Gson Builder — Force Serialization of null Values
- Gson Builder — Exclusion Strategies
- Gson Builder — Relax Gson with Lenient
- Gson Builder — Special Values of Floats & Doubles
- Gson Builder — Model Versioning
- Gson Builder — Formatting of Dates & Custom Date/Time Mapping
- Gson Builder — Pretty Printing
- Gson Builder — HTML Escaping
Java Set的序列化
Java的集合框架里包含了多種數(shù)據(jù)類型。我們已經(jīng)學(xué)習(xí)了List和Map,它們?cè)贘SON的表現(xiàn)形式上有點(diǎn)差異。這周,我們會(huì)研究一下集合。一個(gè)HashSet是一個(gè)非常好的方式確保你的數(shù)據(jù)集合的唯一性。由于集合有存在的理由,且在真實(shí)世界里廣泛使用,Gson也應(yīng)當(dāng)能處理他們。
讓我們回顧一下已有的場(chǎng)景,你的應(yīng)用有些特性,許多用戶可以加入組成一個(gè)團(tuán)隊(duì)。當(dāng)然,每個(gè)用戶只能加入一次,這樣,我們使用一個(gè)HashSet去保存用戶的姓名。
我們用Java實(shí)現(xiàn),我們可能寫出下面的代碼:
HashSet<String> users = new HashSet<>();
users.add("Christian");
users.add("Marcus");
users.add("Norman");
users.add("Marcus"); // would not be added again
集合的序列化與其他類型一樣,你可以直接拋給Gson去處理,它會(huì)返回正確的結(jié)果:
Gson gson = new Gson();
String usersJson = gson.toJson(users);
結(jié)果如下:
[
"Marcus",
"Christian",
"Norman"
]
正如你所見,集合的JSON展示是跟列表一樣的。是的,Java內(nèi)部處理方式不一樣,但更高層次,他們都是以一樣的數(shù)據(jù)存儲(chǔ)。對(duì)于像JSON一樣技術(shù)無(wú)關(guān)的標(biāo)記法,內(nèi)部細(xì)節(jié)并不重要。
Java Set的反序列化
正如我們前面提到的,JSON對(duì)于Set的實(shí)現(xiàn)與List是一樣的。因此,Gson也樂(lè)于將一個(gè)有效的JSON轉(zhuǎn)換為java數(shù)據(jù)類型。記得我們?cè)?a href="http://www.itdecent.cn/p/71cdb7ee1666" target="_blank">列表/數(shù)組那篇博客里的flowerCount的例子么?因?yàn)槲覀兛梢詫?duì)于任何一個(gè)使用JSON,看看代碼:
[
{
"name": "Christian",
"flowerCount": 1
},
{
"name": "Marcus",
"flowerCount": 3
},
{
"name": "Norman",
"flowerCount": 2
}
]
我們處理Set序列化的方式與List是一樣的。我們?yōu)镚son創(chuàng)建一個(gè)Type,然后讓它施展魔力:
String founderJson = "[{'name': 'Christian','flowerCount': 1}, {'name': 'Marcus', 'flowerCount': 3}, {'name': 'Norman', 'flowerCount': 2}]";
Gson gson = new Gson();
Type founderSetType = new TypeToken<HashSet<Founder>>(){}.getType();
HashSet<Founder> founderSet = gson.fromJson(founderJson, founderSetType);
展望
在這篇文章里你看到了如何對(duì)java Set進(jìn)行序列化和反序列化。你知道在JSON上下文中,他們與列表其實(shí)都一樣?,F(xiàn)在我們已經(jīng)探索了所有主要的數(shù)據(jù)類型,接下來(lái)將研究Gson的一些通用配置選項(xiàng)。
如果你需要反饋或有疑問(wèn),在評(píng)論中讓我們知道或twitter @futurestud_io。