上周寫了一篇關於Android自帶的org.JSON與JSONLIB相沖突的文章,今天我想寫一下我對org.json使用的小心得
由於學校項目要求解析一個復雜JSON,所以就上網搜了一下,不過Google一搜JSON數據解析,會出現五花八門的結果,JSONLIB, GSON, FASTJSON等等,唯獨沒有對org.json的使用,其實Android自帶的JSON解析包相當好用,其用法與JSONLIB類似,我是先用的JSONLIB,在JRE環境下用得好好的,到了Android下怎么都跑不通(原來是包沖突T_T,也遇到這個深坑的同學可以翻我另外一篇關於這兩個包沖突的文章)
其實我建議,就用org.json包就好了,並且可以用很簡單的幾行代碼完成復雜的JSON解析,最初我上網看了一些文章,為了解析一個復雜JSON文件又是遞歸又是干嘛的,實在太費勁了,也沒必要。
廢話少說,貼上我的代碼
1 package com.helpers; 2 3 import java.io.InputStream; 4 5 import org.apache.http.util.EncodingUtils; 6 import org.json.JSONArray; 7 8 import android.content.Context; 9 10 import com.example.test.R; 11 12 public class Helpers { 13 public String res; 14 public JSONArray ja; 15 16 public void init(Context context) { 17 try { 18 // 讀取JSON文件 19 InputStream in = context.getResources().openRawResource( 20 R.raw.community); 21 int length = in.available(); 22 byte[] buffer = new byte[length]; 23 in.read(buffer); 24 res = EncodingUtils.getString(buffer, "BIG5"); 25 in.close(); 26 // 實例化JSONArray, 因為我的JSON文件的最外層是Array,如果你是Object就應該實例化一個JSONObject 27 ja = new JSONArray(res); 28 for (int i = 0; i < ja.length(); ++i) { 29 //看看這一行很復雜,其實不難 30 //我的JSON文件中有20個JSONObject的主題,ja.getJSONObject(i)循環讀取 31 //每個主題中有一個comments的Array存放了所有對於這個主題所有的評論getJSONArray("comments") 32 //ja.getJSONObject(i).getJSONArray("comments").getJSONObject(i),因為每個comments也是JSONObject這里第二個getJSONObject(i)就是獲取這些comments中的第一個comments 33 //在comments這個Object下還有一個JSONObject叫author,它里面存放了comments得信息,所以通過getJSONObject("author") 34 //然后這已經是最后一層了,再往下已經沒有子屬的JSONObject或者JSONArray了,getString("profile_image"),大功告成 35 System.out.println(ja.getJSONObject(i).getJSONArray("comments").getJSONObject(i) 36 .getJSONObject("author").getString("profile_image")); 37 } 38 } catch (Exception e) { 39 e.printStackTrace(); 40 } 41 42 } 43 }
如果你看懂這個例子,那你應該明白了,JSONArray中可以嵌套JSONObject,也可以嵌套JSONArray,反之依然,JSONObject也可以嵌套ARRAY或者Object。無論多么復雜的JSON文件,解析的時候就是不斷通過getJSONObject或者getJSONArray。JSON的解析說來說去就是層層獲取(getJSONObject,getJSONArray),達到你想獲取的數據所在的Object或者Array,然后getString,大功告成。
搞清楚這個道理,再復雜的JSON數據文件,只要一行代碼,分分鍾解出來!