Android高效入門-解析JSON資料,使用json.org、Gson、Jackson教學

By | 2016-05-26

在Android中解析從網路取得的JSON資料是很常見的應用,簡單的資料可使用內建的json.org類別,複雜或大量資料時,可使用Google的Gson類別庫或是FastXML的Jackson類別庫。

提醒

本篇文章是延續 Android高效入門-讀取JSON資料與okHttp 一文,可參考該篇內容,熟練後再進行本篇的練習。亦可以直接由GitHub取得上一篇實作完成的專案程式碼,卸離版本控制後再實作本篇。

上個階段完成的程式碼為
檔案庫(Repository): https://github.com/android66/Atm.git
版本名稱: 交易明細-OkHttp連線

解析JSON陣列

一般來說收到JSON資料後,都需轉成語言能夠處理的形式,在Java語言中使用類別與其屬性是最常用的方式,將資料轉換成一個個的物件後,再使用集合類別(List、Set或Map)存放這些物件,因此先從設計一筆資料的類別開始。

設計交易類別Transaction

使用功能表中的「New/Java Class」建立Java類別,名稱為「Transaction」,代表交易,如下圖:

A5108

1. 設計屬性

在Transaction類別的第一層設計帳號、日期、金額與型態四個屬性,如下:

2. 設計建構子

為Transaction設計一個無參數的建構子(建構方法),如下:

再建立一個帶有四個參數的建構子,請使用快速鍵「Alt+Insert」再選擇「Constructor」建構子,按住Shift鍵選擇四個屬性名稱後按下OK,如下圖:

A5110

3. getter/setter方法

一個合法的JavaBean類別需要為屬性設計setter與getter方法,請使用快速鍵「Alt+Insert」再選擇「Getter and Setter」,同樣按著Shift選擇所有屬性,如下圖:

A5109

按下OK後即在Transaction類別中產生必要的setter/getter方法。

使用JSON.org解析

Android中已內建了由http://json.org所設計的JSON轉換工具類別,如JSONObject類別可解析JSON物件,而JSONArray類別可用在JSON陣列。接下來將在自行設計的parseJSON方法中,實作解析JSON資料並將資料收集在Java的ArrayList類別中。以下範例需要的import語法:

本例主要基於回傳的字串,以JSONArray建立物件array,再使用迴圈一個個取出陣列中的JSON物件(使用JSONObject類別),再利用JSONObject提供的方法取出每一筆交內的四項資料,依這四項資料產生Java的Transaction物件,再將物件加入到ArrayList集合物件trans中,如下:

第2行,先準備ArrayList集合物件trans,裏面只能存放Transaction物件。

第4行,將傳入的字串s交給JSONArray的建構子,產生array物件。

第5-14行,以迴圈依序取出交易記錄

第6行,以索引值取得JSONObject物件obj

第7-10行,呼叫JSONObject類的getXX方法取得各個屬性值。

第12行,產生Transaction物件,代表一筆交易記錄

第13行,將物件加入到集合中

執行後在LogCat中的除錯訊息,每一筆交易資料都讀取到,並存放在trans集合中,如下:

使用Gson第三方函式庫

除了Android內建的JSON.org函式庫外,仍有許多在處理JSON格式資料時更有效率的函式庫,例如Gson,Gson是由Google所提供處理JSON格式的函式庫,但並未內建在Android中,以下是Gson的官方網站:

https://github.com/google/gson

請打開專案中的「build.gradle(Module:app)」,在最下方的dependencies區塊中加入Gson的函式庫名稱與版本,如下:

完成後請按上方功能圖示的「Sync Project with Gradle Files」取得並更新函式庫。以下程式碼需要import語法:

本文章內容擷取自[Android實作這樣學]電子書

相關文章:

Category: Android 標籤:, , , , ,

About Hank Tom

專長為程式語言、雲端服務開發,Linux系統管理, 任職:利拓科技 技術長,海林行動科技 技術總監 輔仁大學 兼任助理教授 , 為 Android高效入門>深度學習、CentOS 7建置、管理與伺服器架設實戰、Java網路程式設計、雲端網頁程式設計-Google App Engine應用實作 等書作者

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *