在做项目的时候,发现android跟服务器交付的时候,要获取服务器的json数据,常规的解析就是拿到数据然后取出json字符串,然后挨个挨个的解析,如果接口很多的话,每一个接口都要写很多类似的解析方式,感觉很麻烦。然后我突然想起貌似可以利用反射解析这些数据,写一个方法,然后就可以解析所有的继承model类的javabean。空说有点听起来的有点懵懂的感觉。
返回的数据格式为这种{ "code": 1, "msg": "登陆成功", "data": “这里面才是真实的数据,有时候是jsonArray字符串,有时候是jsonObject字符串”}
下面开始贴代码解析:
利用反射解析jsonObjec字符串
/**
* json 并返回 一個model對象 利用反射机制解析
*
* @param jsonObject
* 需要解析的json对象 必須是純數據
* @param typeItem
* 需要解析成model的對象,只要是繼承model或者是其子類的都行
* @return
*/
@SuppressWarnings("rawtypes")
private static Model parseJsonObject(JSONObject jsonObject, Model typeItem) {
Class classType = typeItem.getClass();
if (jsonObject != null) {
try {
@SuppressWarnings("unchecked")
Constructor<Model> constructor = classType
.getConstructor(JSONObject.class);
Model model = constructor.newInstance(jsonObject);
Log.i("reflect", "------=" + model.toString() + "");
return model;
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printSt