一只大二狗的Android历程--JSon解析
来源:互联网 发布:java分布式架构有哪些 编辑:程序博客网 时间:2024/05/23 18:29
2017年5月2日,21:54,周二
好长时间没写博客了,最近一直在帮家里忙,写一个管理客户的App,当然就是那种从云端数据库拉下数据然后整理的特别Low的类型,,,
今天中午老师布置下了结课前的课程设计–乐学成语,话说14级好像也是这个来着。。。如果涉及到从提供的API上获取数据的话不得不说的就是JSon数据,其实XML解析的也有,很少很少了,,所以这里要说的就是JSon解析的几个例子(初学JSon解析,可能理解上有些问题)
JSon格式
JSon的格式分为两种,一种是包含键值对的Object类型,另一种就是Array类型,这两种可以相互嵌套,一定要分清楚,在人工解析的时候特别重要
无序Object类型
如图所示,Object类型的最大特点是最外面有一对花括号,内部的数据多为键值对的形式,键和值用冒号隔开,多个键值对用逗号分隔
其中Value的类型可以是
有序Array类型
如图所示,Array最大的特点是外层以中括号包围,值之间用逗号隔开
其中Value支持的类型和Object的类型一样
几个例子
现在列举几个例子来说明JSon是如何解析的
1. 纯Object
JSon数据
{"JSON":"Hello World"}
相应的解析语句则为
String jsonText =new JSonFecher().getJSONText(url); //如果对这句有疑问的话可以去我之前的博文 "一只大二狗的Android历程--JSon解析实例_天气预报" 步骤4查看" JSONObject jsonObject=new JSONObject(jsonText); //这一句是用于解析缓存中获取的JSon数据 JSONObject detail=jsonObject.getJSONObject("JSON"); //解析键为 "JSON" 的值
2. Object里嵌套Array类型
JSon数据
{"language":["C#","java","python","basic"]}
相应的解析语句
JSONObject jsonObject=new JSONObject(jsonText); //获取键值为language的值 JSONArray ja=(JSONArray)jsonObject.get("language"); //这里的i是index,相当于数组里元素的位置,可以用for循环都取出来 ja.getString(i);
3.Object里嵌套Array,其中Array里嵌套Object
JSon数据
{ "data":{ "Alpha":[ {"A":"123","B":"456","C":"789"}, {"A":"321","B":"654","C":"987"} ] }}
相应的解析语句为
JSONObject jsonObject=new JSONObject(jsonText); JSONObject detail=jsonObject.getJSONObject("data"); //解析键为 "data" 的值 JSONArray ja =(JSONArray)detail.get("Alpha"); //解析Alpha下的Array JSONObject jo =(JSONObject)ja.get(i); //这里的i也是index,数组里元素的位置,使用JSONObject格式获取键值对下的值 jo.getString("A"); jo.getString("B"); jo.getString("C");
写到这差不多就把经常会遇见的集中情况说完了,可能会有纰漏
4.最后一个实例
JSon数据
{ "status": "0", "msg": "ok", "result": { "name": "叶公好龙", "pronounce": "yè gōng hào lóng", "content": "叶公:春秋时楚国贵族,名子高,封于叶(古邑名,今河南叶县)。比喻口头上说爱好某事物,实际上并不真爱好。", "comefrom": "汉·刘向《新序·杂事》记载:叶公子高非常喜欢龙,器物上刻着龙,房屋上也画着龙。真龙知道了,来到叶公家里,把头探进窗子。叶公一见,吓得拔腿就跑。", "antonym": [ "名副其实", "名实相符" ], "thesaurus": [ "表里不一", "言不由衷" ], "example": "1. 嘴里天天说,\"唤起民众\",民众起来了又害怕得要死,这和叶公好龙有什么两样?" }}
相应的解析语句
String jsonText =new JSonFecher().getJSONText(url); ChengYu chengYu = new ChengYu(); JSONObject jsonObject=new JSONObject(jsonText); //创建一个JSONObject details 解析key值为data后的value JSONObject detail=jsonObject.getJSONObject("result"); //创建temp,wear_advice,city来存储相应key值下的value String name=detail.getString("name"); String pronounce=detail.getString("pronounce"); String content =detail.getString("content"); String comefrom =detail.getString("comefrom"); String antonym; String tongyi; String example; String min; String date; List<ChengYu> chengYuslist=new ArrayList<ChengYu>(); JSONArray ja1=(JSONArray)detail.get("antonym"); JSONArray ja2=(JSONArray)detail.get("thesaurus"); for (int i=0;i<1;i++){ chengYu.setAnto(ja1.getString(i)+""); chengYu.setJinyi(ja2.getString(i)+""); chengYuslist.add(chengYu); } chengYu.setName(name); chengYu.setPinyin(pronounce); chengYu.setContent(content); chengYu.setComeFrom(comefrom); chengYu.setExample(example);
更多的实例可以参考 http://blog.csdn.net/lishiyao124/article/details/62440883
JSon解析差不多就是遇见Object类型的就用JSONObject解析,遇见Array类型的就用JSONArray解析,遇见嵌套的就先声明最外层的再声明内层的最后外层调用内层就好了
另外要说的是老师提供那个API是聚合数据的,免费但是需要实名认证,需要身份证正反面,感觉出于隐私不太好,所以自己花钱买了一个极速数据的API,不贵,5块大洋买了21000次的申请权限,够用了,缺陷是get到的数据有点少(ps:我这不是给他们打广告哈,只是提供一个出路,一个出路。。)
- 一只大二狗的Android历程--JSon解析
- 一只大二狗的Android历程--JSon解析实例_天气预报
- 一只大二狗的Android历程--Snackbar的使用
- 一只大二狗的Android历程--开端
- 一只大二狗的Android历程--OnClickListener & Toast
- 一只大二狗的Android历程--国际化(作业)
- 一只大二狗的Android历程--自定义Toast样式
- 一只大二狗的Android历程--Activity之间的简单数据传递
- 一只大二狗的Android历程--Activity间数据交换的实例
- 一只大二狗的Android历程--PNG图片的Crunching Cruncher错误解决办法
- 一只大二狗的Android历程--文件输入输出流 & SharedPreference
- 一只大二狗的Android历程--简单自定义按钮样式(Custom Button Style)
- 一只大二狗的Android历程--自定义按钮样式(补充)
- 一只大二狗的Android历程--SQLite数据库CRUD操作
- Android的json解析方式(一)
- Android简单的JSON解析(一)
- Json的解析<一>
- android Json数据解析(一)
- ##VIM命令行和Git命令
- PHP中数组定义的几种方法
- 阶乘因式分解(一)
- 前端工程师技能之photoshop巧用系列第二篇——测量篇
- 二分贪心 E
- 一只大二狗的Android历程--JSon解析
- OpenCV中与matlab中相对应的函数
- 前端工程师技能之photoshop巧用系列第一篇——准备篇
- 倒计时button(借鉴CountDownButton)
- Windows系统服务与用户进程共享内存
- OpenCV中对数组(矩阵)的常用操作
- 编译windows程序遇到fatal error C1189 #error No Target Architecture
- XML解析之PULL
- 程序员英文学习日常记录