Android中如何解析JSON數據

 在Android的網絡編程中,JSON是比XML使用更爲廣泛的數據傳輸機制。在許多的http網絡請求或接口調用中,返回的很多都是JSON。所以學會解析JSON是學會Android的基本技能。

        簡單介紹下JSON,JSON是輕量級的文本數據交換格式,獨立於語言和平臺。比XML更小,更快,更易解析。JSON是用鍵值對來保存數據的。JSON保存的值可以是數字、字符串、布爾值、數組和對象。

        廢話少說,直接上代碼。下面對以下JOSN進行解析:

[plain] view plain copy
 print?
  1. {  
  2.       
  3. "language":[  
  4.           
  5.              {  
  6.             "id":1,  
  7.             "name":"Java",  
  8.             "ide":"Eclipse"  
  9.         },  
  10.           
  11.              {  
  12.             "id":2,  
  13.             "name":"C++",  
  14.             "ide":"Visual Studio"  
  15.         }   
  16.              
  17.     ]  
  18.   
  19. }  

在該實驗中,是把該JSON保存爲language.json文件並放置在assets文件夾下。在實際的項目開發中,JSON一般是http請求後由服務器返回的。具體實現代碼如下:
[java] view plain copy
 print?
  1. try {  
  2.     InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");//使用utf-8的編碼方式讀取json;並新建該輸入流;  
  3.     BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//使用BufferReader讀取輸入流中的數據;  
  4.     String line;  
  5.     StringBuilder stringBuilder = new StringBuilder();//所有讀取的json放到StringBuilder中,這裏也可以使用StringBuffer,效果一樣;  
  6.     while ((line = bufferedReader.readLine()) != null) {  
  7.         stringBuilder.append(line);  
  8.     }  
  9.     bufferedReader.close();//按相反的順序關閉流;  
  10.     inputStreamReader.close();  
  11.   
  12.     //以下開始進行json解析;  
  13.     JSONObject language = new JSONObject(stringBuilder.toString());//每一個{}花括號的內容就是一個JSON對象;  
  14.     JSONArray array = language.getJSONArray("language");//獲取language這個對象裏面的JSON數組,因爲每一個[]中括號的內容就是一個JSON數組,數組內可能包含多個JSON對象;  
  15.     for (int i = 0; i < array.length(); i++) {//循環遍歷該數組;  
  16.         JSONObject item = array.getJSONObject(i);//建立數組中的對象;  
  17.         text.append(item.getInt("id") + "  " + item.getString("name") + "  " + item.getString("ide"));//根據鍵值對獲取屬性值;  
  18.         text.append("\n");  
  19.     }  
  20. catch (IOException e) {  
  21.     e.printStackTrace();  
  22. catch (JSONException e) {  
  23.     e.printStackTrace();  
  24. }  

程序運行後,截圖如下:


      至此,已經成功完成對JSON字符串的解析。個人對XML解析和JSON解析的理解就像是剝洋蔥,是一層一層往裏面進行解析,只要搞清楚邏輯關係,就不會有問題。JSON有時候會碰到3層,4層的循環嵌套,會比較麻煩,只要按照步驟進行,就不會出錯。


github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章