安卓开发:解析JSON格式数据
来源:互联网 发布:顶点网络微博平台代理 编辑:程序博客网 时间:2024/05/17 03:16
JSON的主要优势在于它的体积小,在网络上传输时可以更省流量。解析 JSON数据有很多种方法,可以使用官方提供的JSONObject,也可以使用谷歌的开源库GSON。另外,一些第三方的开源库,如Jackson,FastJSON等也非常不错。主要讲下前两种方法。
在开始之前,先在本地服务器如tomcat,在E:\apache-tomcat-7.0.22\webapps\ROOT目录中新建一个get_data.json的文件,并加入如下JSON格式的内容:
[{"id":"5","version":"5.5","name":"Angry Birds"},{"id":"6","version":"6.5","name":"Clash of Clans"},{"id":"7","version":"7.5","name":"Hey Day"}]
准备好数据之后,我们先来看下JSONObject如何解析JSON数据:
//JSONObject方式解析JSON数据 private void parseJSONWithJSONObject(String jsonData){ try { JSONArray jsonArray = new JSONArray(jsonData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String version = jsonObject.getString("version"); Log.d("MainActivity", "id is :"+id); Log.d("MainActivity", "name is :"+name); Log.d("MainActivity", "version is :"+version); } } catch (Exception e) { e.printStackTrace(); } }
在得到了服务器返回的数据后,调用parseJSONWithJSONObject()方法来解析数据。可以看到,解析JSON的代码真的是非常简单,由于我在服务器中定义的是一个JSON数组,因此这里首先是将服务器返回的数据传入到一个JSONArray对象中。然后循环遍历这个JSONArray,从中取出的每一个元素都是一个JSONObject对象,每个JSONObject对象中又包含id、name和version这些数据。接下来只需要调用getString()方法将这些数据取出来,并打印即可。
下面来看下GSON如何解析JSON数据。不过GSON并没有被添加到Android官方的API中,因此需要在项目中添加一个GSON的jar包。
接下来我们需要根据服务器端的JSON数据新增一个APP实体类,并加入id、name和version三个字段。
public class App { private String id; private String name; private String version; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; }}
接下来编写parseJSONWithGSON()方法解析JSON数据:
//GSON方式解析JSON数据 private void parseJSONWithGSON(String jsonData){ Gson gson = new Gson(); List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType()); for (App app : appList) { Log.d("MainActivity", "id is :"+app.getId()); Log.d("MainActivity", "name is :"+app.getName()); Log.d("MainActivity", "version is :"+app.getVersion()); } }
GSON库究竟是神奇在哪里呢?其实它主要就是可以将一段JSON格式的字符串自动映射成一个对象。
比如说一段JSON格式的数据如下:
{"name":"Tom","age":20}
我们就可以定义一个Person类,并加入name和age这两个字段,然后只需简单的调用如下代码就能将JSON数据自动解析成一个Person对象了:
Gson gson = new Gson();Person person = gson.fromJson(jsonData,Person.class);
如果需要解析的是一段JSON数组就会麻烦一点,我们需要借助TypeToken将期望解析的数据类型传入到fromJson()方法中,如下所示:
List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType());
这样我们就可以解析服务器传来的JSON数据了,项目运行结果如下:
注:文章采摘自《第一行代码》
- 安卓开发:解析JSON格式数据
- 安卓学习笔记(12)-Json格式数据解析
- 安卓json数据解析
- 解析JSON格式数据
- 解析json格式数据
- 解析JSON格式数据
- 解析JSON格式数据
- 解析JSON格式数据
- 解析 JSON 格式数据
- json格式数据解析
- Json解析 开发实践 XML和JSON格式的数据
- 安卓解析 json 4种格式 全解析
- 安卓解析 json 4种格式 全解析
- 安卓解析 json 4种格式 全解析
- 安卓Json数据的解析
- Android 开发实践 解析XML和JSON格式的数据
- iOS开发之JSON格式数据的生成与解析
- 服务器采用JSON格式返回数据给安卓客户端
- 二叉树的非递归遍历
- iOS 获取年月日
- Qt Creator中.pro跨平台(Win32\Linux)的写法
- android 之MTV
- Set接口
- 安卓开发:解析JSON格式数据
- 游戏制作之路:游戏引擎选择、Mac下和Windows下UnrealEngine 4体验对比、文档及其他 -- 前几天我说要学做游戏的流程...
- 对于定义"int *p",下列哪些说明可能是正确的?----腾讯2016研发工程师在线模拟笔试题
- javaScript对象里面组装数组,数组组装对象
- linux时间获取
- 栈 NYOJ 2 (括号配对问题)
- java基础知识回顾---String、StringBuffer与StringBuilder之间区别
- 嵌入式调试器GDB简单功能介绍
- ACM中的【数学知识】之【组合数学】(一) Polya定理的简单理解 POJ 1286