首页 > 代码库 > 一行代码解析复杂JSON文件:利用Android自带的包解析JSON

一行代码解析复杂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就应该实例化一个JSONObject27             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中的第一个comments33                 //在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数据文件,只要一行代码,分分钟解出来!

一行代码解析复杂JSON文件:利用Android自带的包解析JSON