Android基礎之json資料解析

一個自學的程式設計師發表於2017-10-31

這次來聊聊Android中json資料的解析,既然是基礎就要求只要你看一遍就必須會的,不牽涉到太多的複雜邏輯,目的就是讓你初步認識json資料的解析和學會對簡單的json資料進行解析。

首先第一步我們先來準備一個json的資料,這裡我們建立一個最簡單的json資料,它長這樣

[{"id":"1","name":"張三"},{"id":"2","name":"李四"}]

關於json語法我們這裡不做介紹,可自行搜尋學習,以上就是最簡單的一個json資料了,這裡其實是一個json陣列了,裡面包含兩條內容。

接下來我們建立新專案,在main資料夾下建立一個新的資料夾assets,將json資料放到這個資料夾下。

第一步:獲取到我們的json資料,可使用如下程式碼完成

InputStream stream = getAssets().open("data.json");
                    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));

                    StringBuilder response = new StringBuilder();
                    String line = "";
                    while ((line=reader.readLine())!=null){
                        response.append(line);
                    }
                    String string = response.toString();

這裡將建立的json資料命名為data.json,上述程式碼中得到的string就是我們拿到的json資料了。

這裡先來說一下json資料解析的常用方法,這裡介紹兩種常用的解析方法,第一種是直接使用java中的方法也即是官方提供的JSONObiect,另外介紹一種開源庫是谷歌的GSON,這兩種是比較常用的,當然還有其他很多比較優秀的開源框架,這裡不再一一介紹,感興趣的可以自己百度學習一下

第二步:開始解析json資料
我們先使用官方提供的JSONObject來對資料進行解析,其實這種方法是JSONObject和JSONArray一起配合使用的,我們來看下程式碼

 //不使用開源庫,使用原生JSONObject解析json資料
 JSONArray jsonArray = new JSONArray(string);                                  for (int i = 0;i<jsonArray.length();i++)
 {

JSONObject jsonObject = jsonArray.getJSONObject(i);
                    System.out.println(jsonObject.getString("name"));
                 }

以上我們首先建立一個JSONArray將資料填充進去,緊接著使用for迴圈遍歷陣列元素,然後建立JSONObject物件就可以通過呼叫JSONObject的getString方法直接拿到json資料中的值了。

接下來我們使用谷歌的開源庫GSON來對資料進行解析,在使用GSON的時候有寫小細節需要注意,我們先來看下如下程式碼

Gson gson = new Gson();
   Person person = gson.fromJson(string,Person.class);
 System.out.println(person.getName());

首先在使用GSON的時候要求我們先建立一個類,比如我們要解析如下json資料

{"id":"1","name":"張三"}

那我們要新建一個Person類,並且加上name和id兩個欄位,設定好set和get方法,然後我們通過上述程式碼就可以對這段json資料進行解析,通過建立的person物件就可以直接通過set和get方法拿到我們想要的值了,但是如果是一下jason資料,再使用上述方法可就會出錯了

[{"id":"1","name":"張三"}]

這個時候如果我們繼續使用如下程式碼就會報錯

Gson gson = new Gson();
   Person person = gson.fromJson(string,Person.class);
 System.out.println(person.getName());

為什麼呢?因為這種方法不能解析json陣列,那麼對於資料是陣列型別的json資料,我們用Gson該如何解析呢?這個只是稍微麻煩了一點點,我們需要藉助TypeToken將期望解析成的資料型別傳入到fromJson()方法中,程式碼如下

 Gson gson = new Gson();
                    List<Person> personList = gson.fromJson(string, new TypeToken<List<Person>>(){}.getType());
                    for (Person person: personList){
                        System.out.println(person.getName());
                    }

通過上述程式碼我們就可以將資料是陣列的json資料進行解析了,在此之前我們說過了在使用GSON的時候需要注意一點就是陣列這塊,我們要記住如下兩段json資料的區別

[{"id":"1","name":"張三"}]
{"id":"1","name":"張三"}

這塊如果不加小心,在使用GSON的時候可能就會遇到點小bug了

以上就是Android中對json資料進行簡單解析的使用方法了,因為是基礎知識介紹,所以選取了非常簡單的json資料,也只簡單的介紹了JSONObject和GSON的簡單用法,也許你會感到json的資料解析真簡單,但是當json資料變得複雜的時候你就會覺得,json的資料解析還是有點挑戰性的,好了,就到這,謝謝各位看官!

相關文章