Android開發之原生解析複雜的json資料
阿新 • • 發佈:2019-02-13
前言:現在app開發肯定離開不了資料的解析,現在資料大部分都是json解析,多數人都使用第三方jar包來解析,但是原生解析同樣重要,今天我來實現一下如何用安卓原生來解析複雜的json資料,保準你看了此篇部落格之後永遠也不會擔心json資料的解析了!
-----------------分割線--------------------
先來看下json資料的構成:
這是一段天氣預報的json資料,資料大致分成四層,裡面有陣列有物件,數組裡面鑲嵌物件,物件裡面又有物件。
-----------------分割線------------------
結構分析:(程式碼可以作為javaBean,可自行實現)
//第一層 public int error_code; public String reason; public String resultcode; public JSONObject result;//含第二層:物件 //result對應的第二層 public JSONArray future;//含第三層:陣列 public JSONObject sk;//含第三層:物件 public JSONObject today;//含第三層:物件 //future對應的第三層 public String week; public JSONObject weather_id;//含第四層:物件 //sk對應的第三層 public String humidity; public String temp; public String time; public String wind_direction; public String wind_strength; //today對應的第三層 public String city; public JSONObject weather_id;//含第四層:物件 //weather_id對應的第四層 public String fa; public String fb;
-----------第一層資料解析-----------其實你把json資料給分析好,基本就是事半功倍了,通過json資料的構造圖我們可以知道result是一個大的物件,至於裡面什麼物件,要看第二層解析了!
ok,我們開始解析最外層資料:
截圖:public void click1(View view) { try { JSONObject jsonObject = new JSONObject(data); int error_code = jsonObject.getInt("error_code"); String reason = jsonObject.getString("reason"); String resultcode = jsonObject.getString("resultcode"); JSONObject result = jsonObject.getJSONObject("result"); Log.i("--最外層解析---->", "error_code:" + error_code); Log.i("--最外層解析---->", "reason:" + reason); Log.i("--最外層解析---->", "resultcode:" + resultcode); Log.i("--最外層解析---->", "result:" + result); parse2(result); } catch (JSONException e) { e.printStackTrace(); } }
--------第二層資料解析--------通過第一層的解析我們可以得到result這個大物件,可以通過json結構圖來看下第二層資料有誰。
ok來看第二層程式碼的解析:
private void parse2(JSONObject result) {
try {
JSONArray future = result.getJSONArray("future");
JSONObject sk = result.getJSONObject("sk");
JSONObject today = result.getJSONObject("today");
Log.i("--result對應的第二層解析---->", "future:" + future);
Log.i("--result對應的第二層解析---->", "sk:" + sk);
Log.i("--result對應的第二層解析---->", "today:" + today);
parse3_1(future);
parse3_2(sk);
parse3_3(today);
} catch (JSONException e) {
e.printStackTrace();
}
}
看下執行結果:
---------第三層資料解析-----------通過第二層解析可以知道,解析出來了兩個物件和一個數組,所以需要在第三層解析這三個資料:
sk和today的解析可以參考第二層解析,我們主要來看future的陣列解析。
分析:既然書陣列解析,我們肯定首先要知道陣列的個數,然後for迴圈解析,可以獲得陣列的每一個物件,然後再對每一個物件進行解析。
ok我們來看程式碼(解析的是區域性資料):
private void parse3_1(JSONArray future) {
try {
for (int i = 0; i < future.length(); i++) {
JSONObject jsonObject = future.getJSONObject(i);
String week = jsonObject.getString("week");
Log.i("--future對應的第三層解析--->", "week:" + week);
JSONObject weather_id = jsonObject.getJSONObject("weather_id");
Log.i("--future對應的第三層解析--->", "weather_id:" + weather_id);
parse4(weather_id);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
來看執行效果圖:
-----------第四層資料解析--------通過第三層解析,我們發現又有一個物件weather_id,這個解析起來比較簡單,我們快速看下程式碼:
private void parse4(JSONObject weather_id) {
try {
String fa = weather_id.getString("fa");
String fb = weather_id.getString("fb");
Log.i("--weather_id對應的第四層解析-->", "fa:" + fa);
Log.i("--weather_id對應的第四層解析-->", "fb:" + fb);
} catch (JSONException e) {
e.printStackTrace();
}
}
執行就不截圖了------------------總結-------------------
其實json資料解析起來也非常簡單,這裡我簡單總結一下:
1.使用json格式化工具方便檢視json結構。
2.自己動手列出來陣列和物件。
關於陣列和物件的區分:
1.遇到{}就是一個物件,用JSONObject。
2.遇到[]就是陣列,用JSONArray。
-----------------下載-------------------