實體類的父類 該類下 Json2bean 是把json轉成實體類 Json2ListBean 吧json轉成 list<實體類>java
GSON使用注意項 :json屬性名和實體的屬性名必須一致,不一致則賦值爲空。android
<!-- lang: java -->json
/**
package com.samon.sais.bean;.net
import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;code
import org.json.JSONException; import org.json.JSONObject;對象
import android.util.Log;get
import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken;string
/**hash
TODO 實體類父類
@date: 2013-4-24 上午9:21:50
@author TFC
@version 1.0.0 */ public class Bean implements Serializable {
/** * */ private static final long serialVersionUID = 1L; int code = -1;
public int getCode() { return code; }
// 狀態值
/**
將實體類傳換成 HashMap
@author TFC
@createtime 2013-4-24 上午9:24:02
@param obj
@return HashMap
@throws IllegalArgumentException
@throws IllegalAccessException
@exception */ public static HashMap<String, Object> objToHash(Object obj) throws IllegalArgumentException, IllegalAccessException { HashMap<String, Object> hashMap = new HashMap<String, Object>(); Class clazz = obj.getClass(); List<Class> clazzs = new ArrayList<Class>();
do { clazzs.add(clazz); clazz = clazz.getSuperclass(); } while (!clazz.equals(Object.class));
for (Class iClazz : clazzs) { Field[] fields = iClazz.getDeclaredFields(); for (Field field : fields) { Object objVal = null; field.setAccessible(true); objVal = field.get(obj); if (objVal == null) { continue; } if (field.getName().equals("serialVersionUID")) { continue; } hashMap.put(field.getName(), objVal); } } return hashMap; }
/**
javaBean
map數據
*/ public static Object toJavaBean(Object javabean, Map<String, String> data) { Method[] methods = javabean.getClass().getDeclaredMethods(); for (Method method : methods) { try { if (method.getName().startsWith("set")) { String field = method.getName(); field = field.substring(field.indexOf("set") + 3); field = field.toLowerCase().charAt(0) + field.substring(1); method.invoke(javabean, new Object[] { data.get(field) }); } } catch (Exception e) { } } return javabean; }
public static String Bean2Json(Object obj) { return new Gson().toJson(obj); }
public static <T> T Json2bean(String json, Class<T> c) { return new Gson().fromJson(json, c); }
public static <T> T Json2bean(JSONObject json, Class<T> c) { return new Gson().fromJson(json.toString(), c); }
public static <T> T Json2bean(JSONObject json) { return new Gson().fromJson(json.toString(), new TypeToken<T>() { }.getType()); }
public static <T> T Json2bean(String json) { return new Gson().fromJson(json.toString(), new TypeToken<T>() { }.getType()); }
public static <T> List<T> Json2ListBean (String json,Class<T> c){ List<T> lis=new ArrayList<T>(); JsonParser parser = new JsonParser();
JsonElement jsonEl = parser.parse(json); JsonArray jsonObj = null;
jsonObj = jsonEl.getAsJsonArray();//轉換成Json對象
for (int i = 0; i < jsonObj.size(); i++) { lis.add(Json2bean(jsonObj.get(i).toString(),c)); }
return lis;
} public static <T> List<T> Json2ListBean (JsonElement json,Class<T> c){ List<T> lis=new ArrayList<T>(); JsonArray jsonObj = null;
jsonObj = json.getAsJsonArray();//轉換成Json對象
for (int i = 0; i < jsonObj.size(); i++) { lis.add(Json2bean(jsonObj.get(i).toString(),c)); } return lis; }
public static Map<String, Object> JsontoMap(String jsonStr) { Map<String, Object> result = new HashMap<String, Object>(); JSONObject jsonObject; try { jsonObject = new JSONObject(jsonStr);
Iterator<String> iterator = jsonObject.keys(); String key = null; String value = null; while (iterator.hasNext()) { try { key = iterator.next(); value = jsonObject.getString(key); result.put(key, value); } catch (Exception e) { // TODO: handle exception Log.e("JsontoMap", e.toString()); } } } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return result;
}
/**
兩個類的屬性對比 同樣的則跳過
@author TFC
@createtime 2013-5-4 下午2:23:26
@param obj
@param oldobj
@return
@throws IllegalArgumentException
@throws IllegalAccessException
@exception */ public static HashMap<String, Object> objToHash(Object obj, Object oldobj) throws IllegalArgumentException, IllegalAccessException { HashMap<String, Object> hashMap = new HashMap<String, Object>(); Class clazz = obj.getClass(); Class oldClazz = obj.getClass(); List<Class> clazzs = new ArrayList<Class>(); List<Class> oldClazzs = new ArrayList<Class>(); do { clazzs.add(clazz); clazz = clazz.getSuperclass(); } while (!clazz.equals(Object.class));
do { oldClazzs.add(oldClazz); oldClazz = oldClazz.getSuperclass(); } while (!oldClazz.equals(Object.class)); for (int i = 0; i < clazzs.size(); i++) { Field[] fields = clazzs.get(i).getDeclaredFields(); Field[] oldfields = oldClazzs.get(i).getDeclaredFields(); for (int j = 0; j < fields.length; j++) { Field field = fields[j]; Field oldField = oldfields[j]; if (field.getName().equals(oldField.getName())) { Object objVal = null; field.setAccessible(true); oldField.setAccessible(true); objVal = field.get(obj); if (objVal == null || objVal.equals(oldField.get(oldobj))) { continue; } hashMap.put(field.getName(), objVal); }
}
} return hashMap; }
}
使用例子: class Person extends Bean { private String name; private int age; } json= {"name":"tfc","age":"25"} Person p=Person.Json2bean(json,Person.Class);