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

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

Gson依賴

該指南是實踐性的并會立刻實現一些序列化。因為大部分的讀者來自Android開發者,因此這是專門為你們定制的,但是Gson可以用于任何的Java環境。在我們開始之前,我們得將Gson庫引進項目。在我寫該文檔時,最新版本為2.8.2。如果你使用的是Gradle,請添加下行代碼:

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>  

對于其他開發者,你可以在其官方Github倉庫下載相應的jar包。

基本的Java-JSON序列化

讓我們做一些序列化工作吧!Serialization在Gson中的意思是將一個Java對象映射為相應的JSON表達方式。在稍后的教程中,我們會采用稍微復雜一點的數據,但是現在,我們以一個相當簡單的UserSimplement對象開始:

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

這個user對象有四個屬性:

  • user的name是一個字符串類型
  • user的email也是一個字符串類型
  • user的age是一個整型,意味著年齡存儲的是年數(比如26歲,而不是準確的生日日期!)
  • 最后的布爾類型isDeveloper表示是否是一個開發者

我們的Android或者Java程序需要將一個UserSimple對象轉換為相應的JSON形式。
假設我們希望成員名稱相同,我們希望該博客的作者Norman的JSON形式如下:

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

讓我們看一下如何使用Gson完成此一轉換。首先,我們需要為Norman創建一個Java對象:

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

完成序列化,需要一個Gson對象。構造器提供了一種簡單的方式:

Gson gson = new Gson();  

接下來,我們需要調用toJson以及傳入UserSimple對象:

String userJson = gson.toJson(userObject);  

userJson包含如下值:

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

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

基本的JSON-Java反序列化

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

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

我們在這里使用'而非"以避免使用大量的"轉義。然而,無論哪種方式。下一步就如你可能猜想的,創建一個Gson實例:

Gson gson = new Gson();  

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

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

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


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容