一只大二狗的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:我这不是给他们打广告哈,只是提供一个出路,一个出路。。)

0 0
原创粉丝点击