Android學習筆記45:JSON資料解析(GSON方式)

來源:互聯網
上載者:User

  JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,採用完全獨立於語言的文字格式設定,為Web應用開發提供了一種理想的資料交換格式。 

  在上一篇博文《Android學習筆記44:JSON資料解析》中,我們使用基本的JSON API完成了在伺服器端建立JSON資料,以及在Android用戶端對JSON資料進行解析。 

  其實,要建立和解析JSON資料,也可以使用GSON來完成。GSON是Google提供的用來在Java對象和JSON資料之間進行映射的Java類庫。使用GSON,可以很容易的將一串JSON資料轉換為一個Java對象,或是將一個Java對象轉換為相應的JSON資料。 

 

1.GSON的兩個重要方法

  在GSON的API中,提供了兩個重要的方法:toJson()和fromJson()方法。其中,toJson()方法用來實現將Java對象轉換為相應的JSON資料,fromJson()方法則用來實現將JSON資料轉換為相應的Java對象。

1.1 toJson()方法

  toJson()方法用於將Java對象轉換為相應的JSON資料,主要有以下幾種形式:

  (1)String toJson(JsonElement jsonElement);

  (2)String toJson(Object src);

  (3)String toJson(Object src, Type typeOfSrc);

  其中,方法(1)用於將JsonElement對象(可以是JsonObject、JsonArray等)轉換成JSON資料;方法(2)用於將指定的Object對象序列化成相應的JSON資料;方法(3)用於將指定的Object對象(可以包括泛型型別)序列化成相應的JSON資料。

1.2 fromJson()方法

  fromJson()方法用於將JSON資料轉換為相應的Java對象,主要有以下幾種形式:

  (1)<T> T fromJson(JsonElement json, Class<T> classOfT);

  (2)<T> T fromJson(JsonElement json, Type typeOfT);

  (3)<T> T fromJson(JsonReader reader, Type typeOfT);

  (4)<T> T fromJson(Reader reader, Class<T> classOfT);

  (5)<T> T fromJson(Reader reader, Type typeOfT);

  (6)<T> T fromJson(String json, Class<T> classOfT);

  (7)<T> T fromJson(String json, Type typeOfT);

  以上的方法用於將不同形式的JSON資料解析成Java對象。

 

2.在伺服器端產生JSON資料

  要使用GSON技術在伺服器端產生JSON資料,首先需要完成以下兩個準備工作。

  (1)使用MyEclipse建立了一個Web Project,這裡我將該工程命名為了“GsonDemoProject”,用來類比伺服器端的Web服務。 

  (2)往該工程中匯入GSON的API資料包gson-2.2.1.jar。 

  然後,我們便可以在該工程中建立一個JsonTools工具類,並實現靜態方法createJsonString(),在該方法中通過使用GSON技術來產生JSON資料。該方法的具體實現如下。

 1   public class JsonTools { 2        3       /* 4        * Function :   產生JSON字串 5        * Param   :   value     想要轉換成JSON字串的Object對象 6        * Retuen  :   JSON字串 7        * Author  :   部落格園-依舊淡然 8        */ 9       public static String createJsonString(Object value) {10           Gson gson = new Gson();11           String string = gson.toJson(value);12           return string;13       }14       15   }

  可以看到,這個方法的具體實現非常簡單,首先建立一個Gson對象,然後通過調用Gson對象的toJson()方法,將傳進來的value(任意的Java對象)轉換成JSON字串即可。

  通過使用該方法,我們可以很方便的將任意Java對象傳遞進來,並將其轉化成JSON資料。和上一篇博文中一樣,我們可以在JsonService類中,實現一個簡單的擷取Person對象列表的方法,具體如下:

 1     /* 2      * Function :  擷取Person對象列表 3      * Author  :  部落格園-依舊淡然 4      */ 5     public List<Person> getListPerson() { 6         List<Person> list = new ArrayList<Person>(); 7         Person person1 = new Person(001, "jack", 25); 8         Person person2 = new Person(002, "rose", 24); 9         Person person3 = new Person(003, "bob", 26);10         list.add(person1);11         list.add(person2);12         list.add(person3);13         return list;14     }

  在該方法中,我們向List列表中加入了3個Person對象,每個Person對象具有id(int)、name(String)和age(int)三個屬性。

  最後,我們還需要建立一個繼承自HttpServlet的JsonAction類,並實現其中的doPost()方法,用來響應用戶端對伺服器的請求。具體如下:

 1   public void doPost(HttpServletRequest request, HttpServletResponse response) 2             throws ServletException, IOException { 3  4         response.setContentType("text/html;charset=utf-8"); 5         request.setCharacterEncoding("utf-8"); 6         response.setCharacterEncoding("utf-8"); 7         PrintWriter out = response.getWriter(); 8          9         List<Person> listPerson = jsonService.getListPerson();10         11         String str = null;12         String action_flag = request.getParameter("action_flag");13         if(action_flag.equals("persons") {14             str = JsonTools.createJsonString(listPerson);15         }16         out.println(str);17         out.flush();18         out.close();19     }

  在該方法中,我們通過調用JsonService類中的getListPerson()方法獲得了Person對象列表listPerson,並將其傳入JsonTools.createJsonString()方法中,產生了Person對象列表的JSON資料。將該工程發布到Tomcat上,使用瀏覽器訪問該Web工程,可以看到1所示的介面,Person對象列表被成功的轉化成了JSON資料。

圖1 產生的JSON資料

 

3.在用戶端解析JSON資料

  在Android工程中,我們可以通過HttpURLConnection介面訪問圖1所示的URL來獲得伺服器上的JSON資料。

  得到JSON資料之後,便可以通過使用前面提到的fromJson()方法,將圖1 所示的JSON資料還原成對應的Person對象列表了。當然了,因為這裡使用到了GSON,同樣需要向Android工程中匯入gson-2.2.1.jar包。具體的實現方法如下。

 1     /* 2      * Function  :   解析JSON資料,還原成Person對象列表 3      * Param     :   jsonString         從伺服器獲得的Json資料 4      * Retuen   :   Person對象列表 5      * Author    :   部落格園-依舊淡然 6      */ 7     public static List<Person> getListPerson(String jsonString) { 8         List<Person> list = new ArrayList<Person>(); 9         Gson gson = new Gson();10         list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());11         return list;12     }

  可以看到,使用GSON解析JSON資料的代碼實現也非常簡單。其中,TypeToken是GSON提供的資料類型轉換器,支援多種資料集合類型轉換,其反射機制可以實現將解析出來的Java對象映射到對應的資料集合中。

  在本執行個體中,同樣點擊Button按鈕向伺服器發送擷取JSON資料的請求,從伺服器獲得JSON資料後,使用以上的程式碼完成對JSON資料的解析,最後將解析得到的Person對象依次顯示在TextView控制項中。程式啟動並執行結果2所示。

圖2 運行結果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.