您的位置:首页 > 移动开发 > Android开发

Android学习笔记----json

2016-03-07 11:56 471 查看

/*********************************************************************************************************************/

解析 JSON 格式数据

比起 XML, JSON 的主要优势在于它的体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性较差,看起来不如 XML 直观。

get_data.json, 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"}]

使用 JSONObject

类似地,解析 JSON 数据也有很多种方法,可以使用官方提供的 JSONObject,也可以使用谷歌的开源库 GSON。另外,一些第三方的开源库如 Jackson、 FastJSON 等也非常不错。

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();
}
}


可以看到,解析 JSON 的代码真的是非常简单,由于我们在服务器中定义的是一个 JSON 数组,因此这里首先是将服务器返回的数据传入到了一个 JSONArray 对象中。然后循环遍历这个 JSONArray,从中取出的每一个元素都是一个 JSONObject 对象,每个 JSONObject 对象中又会包含 id、 name 和version 这些数据。接下来只需要调用 getString()方法将这些数据取出,并打印出来即可。

使用 GSON

谷歌提供的 GSON 开源库可以让解析 JSON 数据的工作更加简单

不过 GSON 并没有被添加到 Android 官方的 API 中,因此如果想要使用这个功能的话,则必须要在项目中添加一个 GSON 的 Jar 包。首先我们需要将 GSON 的资源压缩包下载下来,下载地址是: http://code.google.com/p/google-gson/downloads/list。然后将资源包进行解压,会看到如图 10.10 所示的几个文件。

其中 gson-2.2.4.jar 这个文件就是我们所需要的了,现在将它拷贝到  项目的libs 目录下, GSON 库就会自动添加到项目中了
那么 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类,并加入 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;
}
}


定义如下方法

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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android json