1. 程式人生 > >Android Json解析簡單高效之org.json,取值如囊中取物

Android Json解析簡單高效之org.json,取值如囊中取物

我們通常在Android上採用Gson來解析Json資料,很方便的就可以把資料轉換成List或者map。當碰到日期時間的時候,你可能會遇到坑,需要格式化一下日期時間格式。

本文介紹org.json這種不需要匯入任何包的解析方式,不管Json多少層,如探囊取物。

1、解析{“”:”“} 格式的 JSONObject

如何確認是這種格式,我們都不需要看,開啟 http://json.cn (Json線上解析及格式化驗證網站),把Json資料直接貼上到左邊,如果是正確的Json資料,在右邊我們就可以看到,如下圖:

Json資料

{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”風清揚1223”}

這裡寫圖片描述

在右邊已經顯示瞭解析後的結果,我們這時候點選 摺疊按鈕,如下圖:

這裡寫圖片描述

點選之後的圖:

這裡寫圖片描述

可以看到,摺疊之後,顯示了Object{…},這就表示起碼這一層是 JsonObject格式的資料,這就好辦了,我們開始寫程式碼。

private static final String jsonObjectString = "{\"userId\":981,\"groupId\":2,\"userNickName\":\"xxx\",\"userRealName\":\"風清揚1223\"}";

try {
    // 新建JSONObject
    JSONObject jsonObject = new
JSONObject(jsonObjectString); // 直接可得資料 String userId = jsonObject.getString("userId"); // 列印userId Log.d(TAG, userId); } catch (JSONException e) { e.printStackTrace(); }

很簡單,新建JSONObject,就可以直接在裡面取資料。那下面還有一層呢,譬如下面這種格式的:

{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”風清揚1223”,”xx”:{“yy”:”“}}

如果我們要取得yy的值,怎麼辦?不急,我們還是直接貼上到 json.cn網站:

這裡寫圖片描述

再次點選xx旁邊的摺疊按鈕,如下圖:

這裡寫圖片描述

可以看到,還是一個Object,這就好辦了,我們再來寫程式碼:

// 新建JSONObject
JSONObject jsonObject = new JSONObject(jsonObjectString);

// 先取得 xx的值,是個JSONObject
JSONObject yyObject = jsonObject.getJSONObject("xx");
// 再 取得yy的值
String yy = yyObject.getString("yy");

很方便吧,不管下面多少層,我們都可以通過這種方式方便的進行解析取值。

2、解析[{“”:”“},{“”:”“}] 格式的JsonArray

我們拿個這種格式的資料來舉例,如下:

[{“userId”:981,”GroupID”:2,”userNickName”:”xxx”,”userRealName”:”風清揚1223”},{“userId”:123,”GroupID”:1,”userNickName”:”yyy”,”userRealName”:”abc”}]

還是直接貼上到 json.cn,如下圖:

這裡寫圖片描述

這次看起來比較複雜,別急,我們直接點選最外層的那個 摺疊按鈕:

這裡寫圖片描述

點選之後:

這裡寫圖片描述

可以看到,最外層是Array,我們開始寫程式碼,先得到這個Array,

private static final String jsonArrayString = "[{\"userId\":981,\"GroupID\":2,\"userNickName\":\"xxx\",\"userRealName\":\"風清揚1223\"},{\"userId\":123,\"GroupID\":1,\"userNickName\":\"yyy\",\"userRealName\":\"abc\"}]";

// 新建JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);

好,到這裡,我們已經得到了最外層的那個JSONArray陣列,我們在 json.cn網站最外層摺疊,點選裡面的摺疊按鈕,如下:

這裡寫圖片描述

之後我們看到:

這裡寫圖片描述

是兩個Object,還能想到JSONObject麼,我們繼續完善程式碼:

// 新建JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);

// 得到陣列下標為0的JSONObject
JSONObject jsonObject0 = jsonArray.getJSONObject(0);

重點是直接通過JSONArray 的 getJSONObject(index) 方法來得到JSONObject。

下面就好辦了,全部程式碼如下:

// 新建JSONArray
JSONArray jsonArray = new JSONArray(jsonArrayString);

// 得到陣列下標為0的JSONObject
JSONObject jsonObject0 = jsonArray.getJSONObject(0);

// 直接可取userId
String userId = jsonObject0.getString("userId");

3、總結

對於剛接觸Json的同學,可能會拿不準格式,我們通過直接貼上到json.cn 直接檢視解析後的格式。

無外乎兩種: Object 和 Array,對應到org.json,就是JSONObject 和 JSONArray。最外層都是直接new出來,裡面可直接org.json相應的方法去得到。

用這種方式,不管有多少層,就是多寫點JSONObject 和 JSONArray而已,都可以輕鬆取得你想要的值。

最後,附上Demo下載地址: 點選下載