Json的几种解析方法
2015-01-21 15:28
134 查看
Json数据是比较常见的网络传输数据格式,相比较xml,它更加轻量级,也就更加的节省流量,解析起来也比xml要简单一点,目前Android中有几种方法来解析Json数据。一种是直接用JSONObject对象和JSONArray数组来解析,这种一般对于数据结构比较简单的比较方便,还有一种就是利用谷歌提供的Gson来进行解析,对于数据复杂的JSON相当简便,下面来具体介绍一下这两种方法。首先用来看看JSONObject。
上面这段json是非常基础非常简单的一段,可以直接利用JSONObject来解析。
res是传过来的json数组流,o1解析到了就是里面的数据键值对,而result中又嵌套了一层键值对,我们需要的就是result中的值,也非常简单
直接利用getJSONObject方法来获得result中的值就行了,然后在将里面具体的值赋给我们的变量即可
直接利用getString()方法,同理还有getInt(),getBoolean()等方法。
JSONArray一般是解析数组的,简单的说就是解析【】里面的数据,比如下面一段中result的值,就是以数组形式存在的。
要想解析这种格式的数据,直接一层一层剥开解析也不是很困难,主要是因为虽然这里面有嵌套,但是结构不复杂也很清晰。
一开始同样是JSONObject的对象,因为最外层是{ },所以用这个,下一步
result是一个数组了,所以要用JSONArray来解析,一个【】就是一组数,所以其实result里只有一组数,得到里面的数据也很容易
如果数据位数较多,就要用循环取出来了。这里就已经得到了result中的值了,下面直接赋值即可。
这些就是JSONObject与JSONArray的基本解析方法了,一层一层的剥开,{ }用JSONObject,【】用JSONArray,记住这些就行了。
其实还有一种方法就是利用谷歌提供的gson来解析,gson在面对结构复杂,数据庞大的json时很有优势。还是以上面的json来做例子。
要使用gson首先要是需要jar包的,下载地址http://download.csdn.net/detail/u011780646/8383517
首先要定义一个实体类来存取数据,JsonBean
可以看到数组类型的定义成了List类型,泛型是Result,那么还应该有一个Result的类。
这里就定义了result中各种数值,{ }里的键值对是String,int,boolean等类型,【】是List的类型,其实也是一层一层的剥开,不过这种逻辑上要更直观一点。数据类建好了,就开始解析了,gson解析起来非常的简单。
首先实例化一个gson对象
利用fromJson的方法获得数据,这里传入了两个参数,第一个就是你的json数据源了,第二是刚才建立好的数据类,也就是最外面的那层。
我们需要的list的数据,直接调用get()方法就可以得到了,这样就得到了一个List<Result>对象,用for循环取出即可
这样就可以将json数据完整的解析出来了。
附上一篇关于JSONObject与JSONArray的文章,讲的很透彻/article/1597921.html
篇外:刚刚正式接触Android不久,以前也零散的学习过一点,一直都是略懂皮毛,现在也是安下心来从事Android方面的工作了,才发现连皮毛都不懂。也是在一点一点的学习之中,写这些一是为了加强一下记忆,在总结的过程中回味整个代码的过程,二也是做一个记录,免得很久不用又遗忘了,也希望有不对的地方能够指出来,大家多交流交流!
{ "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的文章,讲的很透彻/article/1597921.html
篇外:刚刚正式接触Android不久,以前也零散的学习过一点,一直都是略懂皮毛,现在也是安下心来从事Android方面的工作了,才发现连皮毛都不懂。也是在一点一点的学习之中,写这些一是为了加强一下记忆,在总结的过程中回味整个代码的过程,二也是做一个记录,免得很久不用又遗忘了,也希望有不对的地方能够指出来,大家多交流交流!
相关文章推荐
- Js解析Json字符串的几种方法比较
- jquery遍历筛选数组的几种方法和遍历解析json对象
- 【VBA研究】解析JSON数据的几种方法
- jquery遍历筛选数组的几种方法和遍历解析json对象
- 关于json解析的几种方法
- jquery遍历筛选数组的几种方法和遍历解析json对象
- iOS json解析的几种方法 NSJSONSerialization,JSONKit,SBJson ,TouchJson
- jquery遍历筛选数组的几种方法和遍历解析json对象
- .NET中常用的几种解析JSON方法
- Android--解析Json格式数据的几种方法
- jquery遍历筛选数组的几种方法和遍历解析json对象
- asp读取解析JSON的几种方法
- Android解析json数据的几种方法
- jquery遍历筛选数组的几种方法和遍历解析json对象
- C++ jsoncpp 几种解析json方法
- jquery遍历筛选数组的几种方法和遍历解析json对象
- jquery遍历筛选数组的几种方法和遍历解析json对象
- Android基础之json数据的几种解析方法
- 关于json解析的几种方法
- JSON的几种解析方法