這篇的內容如題: 利用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跟動畫哦~請見諒(笑)

 

...總感覺有一股貧窮味?

不要瞎掰好嗎~「基德哏」網路正夯經典台詞鄉民都會背| ETtoday網搜新聞| ETtoday新聞雲

 


 

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

 

int01

 

再來點選到

Modules->Dependencies->"+"號->Library..->From Maven...

 

int02

 

然後複製Maven反藍的部分

int04

 

到這邊

int03

 

複製完後按下放大鏡圖標;待載入完後按下OK,等他跑一下下載後就完成囉(・ω・)b

 

Android Studio載入套件

 

首先找到build.gradle(Module: app)

找到dependencies的部分

貼上從GSON Github複製的這一段

implementation 'com.google.code.gson:gson:2.8.6'

 

Android06

 

最後點右上角的Sync Now 即完成

 

Android07

 


 

2. 程式(Java)

 

首先看一下輸入

這是一個常見的JSON字串

Android08

 

用檢視網頁打開的話,他會是這樣

Json01

 

程式很簡單,直接全部

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

Json02

 

因此實體類就是這樣寫

 

/**實體類(依照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()*);

 

 

最後就是輸出了,輸出結果如下

Json03

 


 

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 (・ω・`)………..

那麼~

1606018580-2928071819-g_n

arrow
arrow

    碼農日常 發表在 痞客邦 留言(6) 人氣()