一行代碼解析復雜JSON文件:利用Android自帶的包解析JSON


上周寫了一篇關於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數據文件,只要一行代碼,分分鍾解出來!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM