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());
学员评价