一行代码解析复杂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数据文件,只要一行代码,分分钟解出来!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。