Android开发之原生解析复杂的json数据
2017-06-03 18:38
435 查看
前言:现在app开发肯定离开不了数据的解析,现在数据大部分都是json解析,多数人都使用第三方jar包来解析,但是原生解析同样重要,今天我来实现一下如何用安卓原生来解析复杂的json数据,保准你看了此篇博客之后永远也不会担心json数据的解析了!
-----------------分割线--------------------
先来看下json数据的构成:
这是一段天气预报的json数据,数据大致分成四层,里面有数组有对象,数组里面镶嵌对象,对象里面又有对象。
-----------------分割线------------------
结构分析:(代码可以作为javaBean,可自行实现)
其实你把json数据给分析好,基本就是事半功倍了,通过json数据的构造图我们可以知道result是一个大的对象,至于里面什么对象,要看第二层解析了!
ok,我们开始解析最外层数据:
通过第一层的解析我们可以得到result这个大对象,可以通过json结构图来看下第二层数据有谁。
ok来看第二层代码的解析:
通过第二层解析可以知道,解析出来了两个对象和一个数组,所以需要在第三层解析这三个数据:
sk和today的解析可以参考第二层解析,我们主要来看future的数组解析。
分析:既然书数组解析,我们肯定首先要知道数组的个数,然后for循环解析,可以获得数组的每一个对象,然后再对每一个对象进行解析。
ok我们来看代码(解析的是局部数据):
来看运行效果图:
通过第三层解析,我们发现又有一个对象weather_id,这个解析起来比较简单,我们快速看下代码:
------------------总结-------------------
其实json数据解析起来也非常简单,这里我简单总结一下:
1.使用json格式化工具方便查看json结构。
2.自己动手列出来数组和对象。
关于数组和对象的区分:
1.遇到{}就是一个对象,用JSONObject。
2.遇到[]就是数组,用JSONArray。
-----------------下载-------------------
完整代码下载链接:Android开发之原生解析复杂的json数据代码
json格式化工具下载:HiJson 2.1.2_jdk64
-----------------分割线--------------------
先来看下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
相关文章推荐
- Android开发中使用Gson解析OkHttp传回来的复杂json数据
- Android开发--Json数据的解析
- 开发android客户端需要了解的知识--JSON数据解析
- 开发android客户端需要了解的知识--JSON数据解析
- 【Android网络开发の4】解析和生成JSON数据
- Android开发中json数据解析工具类
- 【Android网络开发の4】解析和生成JSON数据
- Android开发之Gson解析Json嵌套数据
- Android开发 解析JSON数据格式 如何去掉JSON数据文件的BOM头
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- 【Android应用开发】-(17)获取Google天气预报通过Xml和JSON解析数据
- android反地址解析和解析复杂一点的json数据
- Android开发中json数据解析工具类
- 老罗Android开发视频教程( android解析json数据 )4集集合
- Android开发之解析JSon数据(二)
- 【Android网络开发の4】解析和生成JSON数据
- android 复杂的json数据解析
- android开发之JSON数据解析
- Android开发智能机器人聊天项目(2)- Json数据解析