Android开发之原生解析复杂的json数据
前言:现在app开发肯定离开不了数据的解析,现在数据大部分都是json解析,多数人都使用第三方jar包来解析,但是原生解析同样重要,今天我来实现一下如何用安卓原生来解析复杂的json数据,保准你看了此篇博客之后永远也不会担心json数据的解析了!
-----------------分割线--------------------
先来看下json数据的构成:
这是一段天气预报的json数据,数据大致分成四层,里面有数组有对象,数组里面镶嵌对象,对象里面又有对象。
-----------------分割线------------------
结构分析:(代码可以作为javaBean,可自行实现)
//第一层
public int error_code;
public String reason;
public String resultcode;
public JSONObject result;//含第二层:对象
//result对应的第二层
public JSONArray future;//含第三层:数组
public JSONObject sk;//含第三层:对象
public JSONObject today;//含第三层:对象
//future对应的第三层
public String week;
public JSONObject weather_id;//含第四层:对象
//sk对应的第三层
public String humidity;
public String temp;
public String time;
public String wind_direction;
public String wind_strength;
//today对应的第三层
public String city;
public JSONObject weather_id;//含第四层:对象
//weather_id对应的第四层
public String fa;
public String fb;
-----------第一层数据解析-----------其实你把json数据给分析好,基本就是事半功倍了,通过json数据的构造图我们可以知道result是一个大的对象,至于里面什么对象,要看第二层解析了!
ok,我们开始解析最外层数据:
public void click1(View view) {
try {
JSONObject jsonObject = new JSONObject(data);
int error_code = jsonObject.getInt("error_code");
String reason = jsonObject.getString("reason");
String resultcode = jsonObject.getString("resultcode");
JSONObject result = jsonObject.getJSONObject("result");
Log.i("--最外层解析---->", "error_code:" + error_code);
Log.i("--最外层解析---->", "reason:" + reason);
Log.i("--最外层解析---->", "resultcode:" + resultcode);
Log.i("--最外层解析---->", "result:" + result);
parse2(result);
} catch (JSONException e) {
e.printStackTrace();
}
}
截图:--------第二层数据解析--------通过第一层的解析我们可以得到result这个大对象,可以通过json结构图来看下第二层数据有谁。
ok来看第二层代码的解析:
private void parse2(JSONObject result) {
try {
JSONArray future = result.getJSONArray("future");
JSONObject sk = result.getJSONObject("sk");
JSONObject today = result.getJSONObject("today");
Log.i("--result对应的第二层解析---->", "future:" + future);
Log.i("--result对应的第二层解析---->", "sk:" + sk);
Log.i("--result对应的第二层解析---->", "today:" + today);
parse3_1(future);
parse3_2(sk);
parse3_3(today);
} catch (JSONException e) {
e.printStackTrace();
}
}
看下运行结果:
---------第三层数据解析-----------通过第二层解析可以知道,解析出来了两个对象和一个数组,所以需要在第三层解析这三个数据:
sk和today的解析可以参考第二层解析,我们主要来看future的数组解析。
分析:既然书数组解析,我们肯定首先要知道数组的个数,然后for循环解析,可以获得数组的每一个对象,然后再对每一个对象进行解析。
ok我们来看代码(解析的是局部数据):
private void parse3_1(JSONArray future) {
try {
for (int i = 0; i < future.length(); i++) {
JSONObject jsonObject = future.getJSONObject(i);
String week = jsonObject.getString("week");
Log.i("--future对应的第三层解析--->", "week:" + week);
JSONObject weather_id = jsonObject.getJSONObject("weather_id");
Log.i("--future对应的第三层解析--->", "weather_id:" + weather_id);
parse4(weather_id);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
来看运行效果图:
-----------第四层数据解析--------通过第三层解析,我们发现又有一个对象weather_id,这个解析起来比较简单,我们快速看下代码:
private void parse4(JSONObject weather_id) {
try {
String fa = weather_id.getString("fa");
String fb = weather_id.getString("fb");
Log.i("--weather_id对应的第四层解析-->", "fa:" + fa);
Log.i("--weather_id对应的第四层解析-->", "fb:" + fb);
} catch (JSONException e) {
e.printStackTrace();
}
}
运行就不截图了------------------总结-------------------
其实json数据解析起来也非常简单,这里我简单总结一下:
1.使用json格式化工具方便查看json结构。
2.自己动手列出来数组和对象。
关于数组和对象的区分:
1.遇到{}就是一个对象,用JSONObject。
2.遇到[]就是数组,用JSONArray。
-----------------下载-------------------
完整代码下载链接:Android开发之原生解析复杂的json数据代码
json格式化工具下载:HiJson 2.1.2_jdk64
上一篇: activeMQ连接服务器失败后实现spring BackOff接口自定义退避算法,解决activeMQ一直重连导致资源消耗的问题
下一篇: Maven打包错误:Failed to execute goal on project client: Could not resolve dependencies for project
推荐阅读