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方面的工作了,才发现连皮毛都不懂。也是在一点一点的学习之中,写这些一是为了加强一下记忆,在总结的过程中回味整个代码的过程,二也是做一个记录,免得很久不用又遗忘了,也希望有不对的地方能够指出来,大家多交流交流!
- C#解析JSON的几种方法
- Json的几种解析方法
- json解析的几种方法总结
- IOS-Json解析的几种方法
- JSON的几种解析方法
- JSON的几种解析方法
- 关于json解析的几种方法
- 关于json解析的几种方法
- Android解析json数据的几种方法
- asp读取解析JSON的几种方法
- Js解析Json字符串的几种方法比较
- 学习笔记:Android里JSON解析的几种方法
- 【VBA研究】解析JSON数据的几种方法
- Android--解析Json格式数据的几种方法
- C++ jsoncpp 几种解析json方法
- c# 解析JSON的几种办法
- c# 解析JSON的几种办法
- c# 解析JSON的几种办法
- 判断DataTable为空
- web-filter
- JAXB中主要的一些注解
- makefile的详细讲解
- iOS之从手机中检索相片、视频
- Json的几种解析方法
- Android APK安装包瘦身
- Oracle存储空间管理
- J2SE系列之IO流(不断更新)
- Qtcreator 界面启动不了报错:Could not initialize GLX
- Bundle Plugin for Maven
- Oracle_使用bat命令执行sql命令文件
- linux sha256检验
- JNDI 是什么