package com.todayinfo.utils; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; /** * json解析工具类 * * @author zhou.ni 2015年3月19日 */ public class JsonUtils { public synchronized static <T> T getInstance(Class<T> arg0, JSONObject jsonObject) { try { T t = arg0.newInstance(); // Field[] fields = arg0.getFields(); Field[] fields = arg0.getDeclaredFields(); //获取类成员,包括private私有的成员 for (Field field : fields) { field.setAccessible(true); //这时需要设置标志,setAccessible 默认是false if (!jsonObject.has(field.getName())) continue; if (jsonObject.get(field.getName()) != JSONObject.NULL) { Class<?> type = field.getType(); if ((type.isPrimitive() || type.isAssignableFrom(String.class)) && !type.isArray()) { Object o = jsonObject.get(field.getName()); if (o != JSONObject.NULL) { // field.set(t, jsonObject.get(field.getName())); field.set(t, o); } } else if (type.isArray()) { Object object = jsonObject.get(field.getName()); if (object instanceof String) { continue; } JSONArray jSONArray = jsonObject.getJSONArray(field.getName()); Class<?> componentType = type.getComponentType(); int length = jSONArray.length(); Object array = Array.newInstance(componentType, length); for (int i = 0; i < length; i++) { if (componentType.isPrimitive() || componentType.isAssignableFrom(String.class)) { Array.set(array, i, jSONArray.get(i)); } else { JSONObject jobj = jSONArray.getJSONObject(i); Object instance = getInstance(componentType, jobj); Array.set(array, i, instance); } } field.set(t, array); } else { field.set(t, getInstance(type, jsonObject.getJSONObject(field.getName()))); } } } return t; } catch (Exception e) { Log.e("json paser error", e.getMessage(), e); } return null; } public static <T> List<T> getInstance(Class<T> arg0, JSONArray jSONArray) throws JSONException { List<T> result = new ArrayList<T>(); int length = jSONArray.length(); for (int i = 0; i < length; i++) { result.add(getInstance(arg0, jSONArray.getJSONObject(i))); } return result; } }