上周写了一篇关于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数据文件,只要一行代码,分分钟解出来!
时间: 2024-10-13 10:47:25