第一行代码-10.4 解析JSON格式数据
2016-03-01 11:35
579 查看
和XML相比,JSON的优势在于体积小,网络上传输的时候更省流量,但是缺点在于语义性较差,看起来不如XML直观。
准备工作:创建get_data.json,然后输入内容:
依然是在本地测试打开这个文件,效果如下:
1、使用JsonObject
直接展示代码和效果:
2、使用GSON
GSON的功能更加强大,不过它本身并没有添加到Android的API中,需要下载GSON的json包,然后添加到工程目录下的libs文件夹内。
然后说明一下GSON的用法:其实它主要就是可以将一段JSON 格式的字符串自动映射成一个对象,从而不需要我们再手动去编写代码进行解析了。
比如说一段JSON 格式的数据如下所示:{“name”:”Tom”,”age”:20}
那我们就可以定义一个Person 类,并加入name 和age 这两个字段,然后只需简单地调用如下代码就可以将JSON 数据自动解析成一个Person 对象了:
如果需要解析的是一段JSON 数组会稍微麻烦一点,我们需要借助TypeToken 将期望解析成的数据类型传入到fromJson()方法中,如下所示:
下面就来测试一下它的用法:首先创建App类:
然后修改MainActivity中的代码,如下:
最终效果和前面一样,就不展示了。
准备工作:创建get_data.json,然后输入内容:
[{"id":"5","version":"5.5","name":"Angry Birds"}, {"id":"6","version":"7.0","name":"Clash of Clans"}, {"id":"7","version":"3.5","name":"Hey Day"}]
依然是在本地测试打开这个文件,效果如下:
1、使用JsonObject
直接展示代码和效果:
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(); } }
2、使用GSON
GSON的功能更加强大,不过它本身并没有添加到Android的API中,需要下载GSON的json包,然后添加到工程目录下的libs文件夹内。
然后说明一下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<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>() {}.getType());
下面就来测试一下它的用法:首先创建App类:
// App.java public class App { private String id; private String name; private String version; public void setId(String id) { this.id = id; } public String getId() { return id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setVerison(String version) { this.version = version; } public String getVersion() { return version; } }
然后修改MainActivity中的代码,如下:
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()); } }
最终效果和前面一样,就不展示了。
相关文章推荐
- JSON解析
- 使用live delegate on来解决js对后加载的html失效的问题
- 了解学习JS中this的指向
- JS两个等号和三个等号
- JavaScript实现简洁的俄罗斯方块完整实例
- javascript实例学习之二——类新浪微博的输入框
- JS的内建函数reduce
- js 回调函数
- html + js 右 点击 弹出 菜单
- 几个JS DOM操作的函数
- extjs 初始化函数 中的 this.callParent(arguments);类似于继承么?就是继承父类的对应的初始化函数
- Web与JS交互一个强大的方法
- JavaScript跨域总结
- 10款面向HTML5 画布(Canvas)的JavaScript库
- 第一个JSP程序
- JS实现图片平面旋转的方法
- <a>标签中href="javascript:;"的意思
- js关闭弹出window
- JavaScript如何获取css属性
- 20160301--Js01