Json的几种解析方法

来源:互联网 发布:兼职插画知乎 编辑:程序博客网 时间:2024/06/05 08:48

        Json数据是比较常见的网络传输数据格式,相比较xml,它更加轻量级,也就更加的节省流量,解析起来也比xml要简单一点,目前Android中有几种方法来解析Json数据。一种是直接用JSONObject对象和JSONArray数组来解析,这种一般对于数据结构比较简单的比较方便,还有一种就是利用谷歌提供的Gson来进行解析,对于数据复杂的JSON相当简便,下面来具体介绍一下这两种方法。首先用来看看JSONObject。

{"resultcode":"200","reason":"成功的返回","result":{"area":"浙江省温州市平阳县","sex":"男","birthday":"1989年03月08日"}}

上面这段json是非常基础非常简单的一段,可以直接利用JSONObject来解析。

JSONObject o1 = new JSONObject(res);

res是传过来的json数组流,o1解析到了就是里面的数据键值对,而result中又嵌套了一层键值对,我们需要的就是result中的值,也非常简单

JSONObject result = o1.getJSONObject("result");

直接利用getJSONObject方法来获得result中的值就行了,然后在将里面具体的值赋给我们的变量即可

String area = result.getString("area")

直接利用getString()方法,同理还有getInt(),getBoolean()等方法。

JSONArray一般是解析数组的,简单的说就是解析【】里面的数据,比如下面一段中result的值,就是以数组形式存在的。

{    "resultcode": "200",    "reason": "SUCCESSED!",    "result": [        {            "city": "苏州",  /*城市*/            "PM2.5": "73",  /*PM2.5指数*/            "AQI": "98",    /*空气质量指数*/            "quality": "良", /*空气质量*/            "PM10": "50",/*PM10*/            "CO": "0.79",  /*一氧化碳*/            "NO2": "65",  /*二氧化氮*/            "O3": "28",    /*臭氧*/            "SO2": "41",  /*二氧化硫*/            "time": "2014-12-26 11:48:40"/*更新时间*/          }    ],    "error_code": 0}

要想解析这种格式的数据,直接一层一层剥开解析也不是很困难,主要是因为虽然这里面有嵌套,但是结构不复杂也很清晰。

JSONObject o1 = new JSONObject(result);


一开始同样是JSONObject的对象,因为最外层是{ },所以用这个,下一步

JSONArray res = o1.getJSONArray("result");

result是一个数组了,所以要用JSONArray来解析,一个【】就是一组数,所以其实result里只有一组数,得到里面的数据也很容易

JSONObject o2 = res.getJSONObject(0);

如果数据位数较多,就要用循环取出来了。这里就已经得到了result中的值了,下面直接赋值即可。

这些就是JSONObject与JSONArray的基本解析方法了,一层一层的剥开,{ }用JSONObject,【】用JSONArray,记住这些就行了。

 

其实还有一种方法就是利用谷歌提供的gson来解析,gson在面对结构复杂,数据庞大的json时很有优势。还是以上面的json来做例子。

要使用gson首先要是需要jar包的,下载地址http://download.csdn.net/detail/u011780646/8383517

首先要定义一个实体类来存取数据,JsonBean

package utils;import java.util.ArrayList;import java.util.List;public class JsonBean {private String resultcode;private String reason;private List<Result> result;private String error_code;public String getResultcode(){return resultcode;}public void setResultcode(String resultcode){this.resultcode = resultcode;}public String getReason(){return reason;}public void setReason(String reason){this.reason = reason;}public List<Result> getReslt(){return result;}public void setResult(List<Result> results){this.result = result;}public String getErrorCode(){return error_code;}public void setErrorCode(String error_code){this.error_code = error_code;}}

可以看到数组类型的定义成了List类型,泛型是Result,那么还应该有一个Result的类。

package utils;public class Result {private String city;private String AQI;private String quality;private String time;public String getCity(){return city;}public void setCity(String city){this.city = city;}public String getAQI(){return AQI;}public void setAQI(String AQI){this.AQI = AQI;}public String getQuality(){return quality;}public void setQuality(String quality){this.quality = quality;}public String getTime(){return time;}public void setTime(String time){this.time = time;}}

这里就定义了result中各种数值,{ }里的键值对是String,int,boolean等类型,【】是List的类型,其实也是一层一层的剥开,不过这种逻辑上要更直观一点。数据类建好了,就开始解析了,gson解析起来非常的简单。

Gson gson = new Gson();

首先实例化一个gson对象

JsonBean jsonbean = gson.fromJson(result, JsonBean.class);


利用fromJson的方法获得数据,这里传入了两个参数,第一个就是你的json数据源了,第二是刚才建立好的数据类,也就是最外面的那层。

List<Result> listresult = jsonbean.getReslt();

我们需要的list的数据,直接调用get()方法就可以得到了,这样就得到了一个List<Result>对象,用for循环取出即可

for(Result r: listresult){String city = r.getCity();String aqi = r.getAQI();String quality = r.getQuality();String time = r.getTime();}

这样就可以将json数据完整的解析出来了。

附上一篇关于JSONObject与JSONArray的文章,讲的很透彻http://blog.csdn.net/lishuangzhe7047/article/details/28880009

 

篇外:刚刚正式接触Android不久,以前也零散的学习过一点,一直都是略懂皮毛,现在也是安下心来从事Android方面的工作了,才发现连皮毛都不懂。也是在一点一点的学习之中,写这些一是为了加强一下记忆,在总结的过程中回味整个代码的过程,二也是做一个记录,免得很久不用又遗忘了,也希望有不对的地方能够指出来,大家多交流交流!





 

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学生遭套路贷反被仲裁怎么办 赏脸打错字尝脸怎么办 红掌的花变黑了怎么办 红掌花苞发黑了怎么办 水培植物腐根了怎么办 水培绿萝水发臭怎么办 水里养花根烂掉怎么办 桅子花叶子发黑怎么办 大株月季烂根怎么办 月季水浇多了烂根的怎么办 金桔盆栽烂根怎么办 盆栽的长寿果树烂根怎么办 家里的石榴烂根怎么办 山桔盆栽烂根怎么办 养的植物烂根怎么办 桅子花叶子长霉怎么办 紫薇花叶子干了怎么办 高层玻璃阳台往下看恐高怎么办 比熊放阳台叫怎么办 海员入职体检不合格怎么办 联币金融立案投资人怎么办 联币金融的投资怎么办 养老保险领了几个月就挂了怎么办 高铁餐吧乘务员东西卖不出去怎么办 铁路局如果查出有乙肝怎么办 在火车站丢了东西怎么办 在新乡火车站丢了东西怎么办 自己的行李忘到高铁安检怎么办 高铁二等座睡觉怎么办 空少岁数大了怎么办 美国留学生办欧洲签证怎么办 苏州小区不让装充电桩怎么办 饿了么运力不足怎么办 书法落款写偏了怎么办 辐射4运行不流畅怎么办 vgs币忘了映射怎么办 货车把我的货物运输中损坏怎么办 道路货物运输从业资格证过期怎么办 高铁喷雾被扣了怎么办 宝宝不好好吸奶怎么办 宝宝不用劲吸奶怎么办