Gson——Set的映射

原文鏈接:Gson — Mapping of Sets

作者:Norman Peitek

翻譯:簽到錢就到

前面的兩篇博客,我們展示了如何用Gson映射List數(shù)據(jù)Java Map。本文中,你將要學(xué)習(xí)如何序列化(反序列化)Java集合(Set)。

當(dāng)然,這不是我們Gson系列里唯一的一篇文章,如果你對(duì)其他的主題感興趣,可以看一下我們的大綱:

Gson系列概覽

  1. 用java-JSON實(shí)現(xiàn)序列化合反序列化
  2. 嵌套對(duì)象的映射
  3. 數(shù)組和列表對(duì)象的映射
  4. Map的映射
  5. Set的映射
  6. 空值的映射
  7. Gson Model Annotations — How to Ignore Fields with @Expose
  8. Gson Model Annotations — How to Change the Naming of Fields with @SerializedName
  9. Gson Builder — Basics & Naming Policies
  10. Gson Builder — Force Serialization of null Values
  11. Gson Builder — Exclusion Strategies
  12. Gson Builder — Relax Gson with Lenient
  13. Gson Builder — Special Values of Floats & Doubles
  14. Gson Builder — Model Versioning
  15. Gson Builder — Formatting of Dates & Custom Date/Time Mapping
  16. Gson Builder — Pretty Printing
  17. 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。

最后編輯于
?著作權(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)容

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