Android应用软件开发

194课时
2.6K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
3分钟

7.4 相关知识

7.4.2.JSON数据的解析

常见的json解释库有org.json, gson, json-lib, json-simple等。

1.使用org.json解析JSON

Android SDK中提供了org.json用来解析JSON数据。

其中JSONObject这个类表示了一个可更改且无序的键值对集合,更简单一点,可以直接认为这个类表示了一个 JSON 的信息。在这个类中,其键名是唯一且不为null的字符串。而值则可以为 JSONObject、JSONArray、Strings、Booleans、Integers、Longs、Double 或者 JSONObject.NULL。注意,这里的NULL可不是null,而是JSONObject的一个内部类。

对于这个类,在使用时要要注意的就是在调用时,其会按照调用的方法进行类型转换。下面就介绍一下三个类函数:

getXXX() 获取一个值,此方法如果发生失败,例如没有找到对应的键值或类型转换失败,就会抛出一个JSONException异常; 如:getString``,getInt。

optXXX() 此类方法也是用于获取一个值,但是如果发生失败,其不会抛出异常,而是返回一个默认值; 如optInt,optString。

put() 此类方法就是向对象中插入一个键值对。特别注意其插入NULL和null是不同的;此类中的 NULL,它与 JAVA 中的null是不一样的,它仅仅是JSONObject中用于标识null的对象。举个例子:

\1. put(name, null) 这个方法调用将会移除该对象中对应的键值;

\2. put(name, JSONObject.NULL) 将会往对象中添加一个键值,而其值为 JSONObject.NULL;

解析示例如下:

JSONObject jsonObject = new JSONObject(jsondata);

String firstName = jsonObject.optString("firstName");

String lastName = jsonObject.optString("lastName");

Log.i("swifter", firstName + " " + lastName); //输出

jsonObject.put("firstName", "Avril");

JSONArray类用于处理数组,也有getXXX()和optXXX()方法,但是基本都需要传入索引值。

这个类有很多性质都与JSONObject 一样,比如说类型转换,对于NULL和null的处理,有get,put,opt方法等,所以,只要你熟悉了JSONObject,那么使用这个类,也会非常容易,使用方法示例:

JSONArray jsonArray = new JSONArray("10,11,12,13,14,15,16");

for(int index = 0;index<jsonArray.length();index++) {

Log.i("data",index+":"+jsonArray.getInt(index));

}

\2. 使用gson解析JSON数据

gson是Google提供的解析JSON的一个开源类库。使用前需要先将gson.Jar添加到项目中,才能使用其提供的方法。

使用gson,我们可以非常轻松的实现数据对象和json对象的相互转化,其中我们最常用的就是两个方法,一个是fromJSON(),将json对象转换成我们需要的数据对象,另一个是toJSON(),这个就是将我们的数据对象转换成json对象。

使用方法示例:

Gson gson = new Gson();// 使用new方法

String jsonStr = gson.toJson(user, User.class); // toJson 将bean对象转换为json字符串

Student user= gson.fromJson(jsonStr, User.class); // fromJson 将json字符串转为bean对象

String jsonStr2 = gson.toJson(list); // 序列化List

// 反序列化成List时需要使用到TypeToken getType()

List<User> retList = gson.fromJson(jsonStr2,new TypeToken<List<User>>(){}.getType());