這篇的內容如題: 利用Gson套件來解JSON字串
雖然大部分會找到我這邊的人都是依靠關鍵字查過來的,所以應該都會有一定基本知識吧...吧...吧 (゚д゚;)
簡單來說閱讀這篇之前建議是要先了解何謂"JSON格式字串"
JSON全名為JavaScript Object Notation
在程式語言中都可以以字串存取
同時他也是目前網路API傳輸中最為普遍使用的媒介
最近一陣子我連續收到了好幾個問題都是跟解JSON以及網路連線有關的
在這方面我曾經寫過三篇文章來講這個部分
分別是
1. 如何製作JSON格式字串
2. 如何使用Java原生套件取得Http並使用JSONArray搭配JsonObject解JSON
3. 如何用第三方套件okHttp來取得網路資源
而這三篇分別對應
1. 碼農日常-『Android studio』如何使用Gson製作Json格式資料
2. 碼農日常-『Android studio』取得網路資料(JSON格式)並以RecyclerView顯示列表
3. 碼農日常-『Android studio』以okHttp第三方庫取得網路資料(POST、GET、WebSocket)
那今天的文章就是搭配著okHttp看的,雖然沒有講到如何要轉化為RecyclerView做UI顯示
不過我覺得以一個取得網路JSON並解析的專案來說okHttp+GSON幾乎是最佳解(・ω・)v
那麼今天的程式我將會貼上Java跟kotlin兩個版本
而編輯器也不是用Android Studio做,這次改用他的孿生兄弟intellij來完成
雖然介面看起來一模模一樣樣...(ㆆᴗㆆ)
然後這次也沒有Github跟動畫哦~請見諒(笑)
...總感覺有一股貧窮味?
1. 加入GSON
GSON是由Google開發的一套專門用來處理跟JSON相關操作的一個第三方套件
他除了像我前面文章寫道他可以拿來製作JSON字串外
同時他最廣為人知的部分是他是拿來解JSON字串!!
拜託~~這部分才是比較實用的部分好嗎( ˘・з・)( ˘・з・)( ˘・з・)
今天我是使用intellij完成這篇文章的內容,因此我會先PO上如何載入GSON至intellij
當然等等我也會寫Android studio如何操作
關於GSON的相關資源在這,不用謝了( ˘・з・)
GSON Github-> https://github.com/google/gson
Maven->https://mvnrepository.com/artifact/com.google.code.gson/gson
intellij載入套件
首先請開啟intellij, 找到畫面左上角的
File->Project Structure
再來點選到
Modules->Dependencies->"+"號->Library..->From Maven...
然後複製Maven反藍的部分
到這邊
複製完後按下放大鏡圖標;待載入完後按下OK,等他跑一下下載後就完成囉(・ω・)b
Android Studio載入套件
首先找到build.gradle(Module: app)
找到dependencies的部分
貼上從GSON Github複製的這一段
implementation 'com.google.code.gson:gson:2.8.6'
最後點右上角的Sync Now 即完成
2. 程式(Java)
首先看一下輸入
這是一個常見的JSON字串
用檢視網頁打開的話,他會是這樣
程式很簡單,直接全部
public class GsonJava { /**JSON字串*/ static String json = "[{\"ID\":\"1\",\"Name\":\"Sam\",\"Subject\":\"Math\"}," + "{\"ID\":\"2\",\"Name\":\"Rika\",\"Subject\":\"Physical\"}, " + "{\"ID\":\"3\",\"Name\":\"Takahashi\",\"Subject\":\"Japanese\"}," + "{\"ID\":\"4\",\"Name\":\"Eddies\",\"Subject\":\"Chemistry\"}, " + "{\"ID\":\"5\",\"Name\":\"Sally\",\"Subject\":\"English\"}, " + "{\"ID\":\"6\",\"Name\":\"Min-Te Guo\",\"Subject\":\"Chinese\"}]"; public static void main(String[] args) { System.out.println("輸入: "+json); /**解JSON字串,使之轉為List<實體類></>*/ List<Data> list = new Gson().fromJson(json,new TypeToken<List<Data>>(){}.getType()); for (Data data: list) { System.out.println("ID: "+data.ID+"\n"+"Name: "+data.Name+"\n" +"Subject: "+data.Subject+"\n==========================="); } } /**實體類(依照JSON格式定義)*/ private class Data{ int ID; String Name; String Subject; } }
重點兩個
1. 實體類
2. new GSON().fromJson();
首先講講實體類(Entity)
以前我叫他Setter-getter,後來發現我當時說的不算錯,但是好像跟想得有點不一樣..(゚д゚;)
雖然是黑歷史...不過懇請幫我點閱一下人´∀`)
->碼農日常-『Java』List<GetterSetter> 如何在陣列中使用Getter Setter
而這個實體類的內容要觀察JSON格式後來制定裡面要寫些什麼
例如像我這次的JSON中。他的key為
1. ID
2. Name
3. Subject
因此實體類就是這樣寫
/**實體類(依照JSON格式定義)*/ private class Data{ int ID; String Name; String Subject; }
第二個重點就是使用GSON轉換字串為實體類
List<Data> list = new Gson().fromJson(json,new TypeToken<List<Data>>(){}.getType());
new GSON().fromJson(*json字串*,*TypeToken<List<實體類>>(){}.getType()*);
最後就是輸出了,輸出結果如下
3. 程式(Kotlin)
基本上實現邏輯跟Java一模一樣,沒什麼特別的地方
就直接PO了
import com.google.gson.Gson val json = "[{\"ID\":\"1\",\"Name\":\"Sam\",\"Subject\":\"Math\"}," + "{\"ID\":\"2\",\"Name\":\"Rika\",\"Subject\":\"Physical\"}," + "{\"ID\":\"3\",\"Name\":\"Takahashi\",\"Subject\":\"Japanese\"}," + "{\"ID\":\"4\",\"Name\":\"Eddies\",\"Subject\":\"Chemistry\"}," + "{\"ID\":\"5\",\"Name\":\"Sally\",\"Subject\":\"English\"}," + "{\"ID\":\"6\",\"Name\":\"Min-Te Guo\",\"Subject\":\"Chinese\"}]" fun main() { val list = Gson().fromJson(json, Array<Data>::class.java).toMutableList() for (data:Data in list){ println("ID: "+data.ID+"\n"+"Name: "+data.Name+"\n"+"Subject: "+data.Subject +"\n===========================") } } private class Data{ var ID = "" var Name = "" var Subject= "" }
以上就是一個使用第三方庫GSON解JSON的過程
我之前寫的碼農日常-『Android studio』取得網路資料(JSON格式)並以RecyclerView顯示列表
是屬於比較陽春的寫法
人麻...總是要進步的~知不知道XD
我當時是還真的不會Gson (・ω・`)………..
那麼~
留言列表