| /** | 
|  * Company: ImanSoft( http://www.imansoft.cn/ ) | 
|  */ | 
| package com.dayu.qiheonlinelibrary.utils; | 
|   | 
| import android.text.TextUtils; | 
|   | 
| import com.google.gson.Gson; | 
| import com.google.gson.GsonBuilder; | 
| import com.google.gson.JsonArray; | 
| import com.google.gson.JsonElement; | 
| import com.google.gson.JsonParser; | 
| import com.google.gson.LongSerializationPolicy; | 
|   | 
| import org.json.JSONArray; | 
| import org.json.JSONException; | 
| import org.json.JSONObject; | 
|   | 
| import java.lang.reflect.ParameterizedType; | 
| import java.lang.reflect.Type; | 
| import java.util.ArrayList; | 
| import java.util.HashMap; | 
| import java.util.Iterator; | 
| import java.util.LinkedHashMap; | 
| import java.util.List; | 
| import java.util.Map; | 
| import java.util.Map.Entry; | 
| import java.util.Set; | 
|   | 
|   | 
| /** | 
|  * @author cuiyaosheng 主要功能: 创建日期:2014年2月13日 修改人,修改日期,修改内容 | 
|  * @com.iman.hom.commons.calls.@JsonParser | 
|  */ | 
| public class MyJsonParser { | 
|   | 
|     /** | 
|      * 构造函数 | 
|      */ | 
|     public MyJsonParser() { | 
|     } | 
|   | 
|     /** | 
|      * 获取Json字符串中的属性值 | 
|      * | 
|      * @param json     Json字符串 | 
|      * @param attrName 属性名称 | 
|      * @return 属性值 | 
|      * @throws JSONException | 
|      */ | 
|     public static Object getPropertyFromJson(String json, String attrName) throws JSONException { | 
|         JSONObject jsonObject; | 
|         try { | 
|             jsonObject = new JSONObject(json); | 
|             return jsonObject.get(attrName); | 
|         } catch (JSONException e) { | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /** | 
|      * 将对象传换成Json窜 | 
|      * | 
|      * @param t | 
|      * @return | 
|      */ | 
|     public static <T> String bean2Json(T t) { | 
|         try { | 
|             if (t == null && !TextUtils.isEmpty(t.toString())) | 
|                 return ""; | 
|             Gson gson = new Gson(); | 
|             return gson.toJson(t); | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return ""; | 
|     } | 
|   | 
|     /*** | 
|      * 转换为T类型 | 
|      * | 
|      * @param json | 
|      * @param tClass | 
|      * @param <T> | 
|      * @return | 
|      */ | 
|     public static <T> T json2Bean(String json, Class<T> tClass) { | 
|         try { | 
|             if (!TextUtils.isEmpty(json)) { | 
|                 Gson gson = new Gson(); | 
|                 return gson.fromJson(json, tClass); | 
|             } | 
|   | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|   | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 将Json 直接序列化 为List | 
|      * | 
|      * @param json 目标json 字符串 | 
|      * @param type 类型,用gson 的TypeKoken 包装的类型,如:new TypeToken<List<ShowItemDetailInfo.DetailItemImage>>(){}.getType() | 
|      * @return | 
|      */ | 
|     public static <T> List<T> json2List(String json, Type type) { | 
|         try { | 
|             if (!TextUtils.isEmpty(json)) { | 
|                 Gson gson = new Gson(); | 
|                 return gson.fromJson(json, type); | 
|             } | 
|   | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|   | 
|     } | 
|   | 
|     /**** | 
|      * 将json转化成对应的JavaBean | 
|      * | 
|      * @param json | 
|      * @return | 
|      */ | 
|     public static <T> T getBeanFromJson(String json, Class<T> cl) { | 
|         try { | 
|             Gson gson = buildGson(); | 
|             return (T) gson.fromJson(json, cl); | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|   | 
|     } | 
|   | 
|     /**** | 
|      * 将json转化成对应的JavaBean | 
|      * | 
|      * @param json | 
|      * @return | 
|      */ | 
|     public static <T> T getBeanFromJson(String json, Type cl) { | 
|         try { | 
|             Gson gson = buildGson(); | 
|             return (T) gson.fromJson(json, cl); | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|   | 
|     } | 
|   | 
|     private static Gson buildGson() { | 
|         GsonBuilder gsonBuilder = new GsonBuilder(); | 
| //        gsonBuilder.registerTypeAdapterFactory(GsonTypeAdapter.FACTORY); | 
|         return gsonBuilder.create(); | 
|     } | 
|   | 
| //    /**** | 
| //     * 将json转化成对应的JavaBean | 
| //     * | 
| //     * @param json | 
| //     * @return | 
| //     */ | 
| //    public static <T> List<T> getListBeanFromJson(String json, final List<T> cl) { | 
| //        try { | 
| //            List<T> list = new ArrayList<>(); | 
| //            Gson gson = new Gson(); | 
| //            Type listType = new TypeToken<cl>() { | 
| //            }.getType(); | 
| //            return list = gson.fromJson(json, listType); | 
| // | 
| //        } catch (Exception e) { | 
| //            e.printStackTrace(); | 
| //        } | 
| //        return null; | 
| // | 
| //    } | 
|   | 
|     /**** | 
|      * 将json转化成对应的JavaBean | 
|      * | 
|      * @return | 
|      */ | 
|     public static <T> T getBeanFromMap(Map<String, Object> map, Class<T> cl) { | 
|         return getBeanFromJson(getJsonFromMap(map), cl); | 
|   | 
|     } | 
|   | 
|   | 
|     public static <T> T getJsonForList(List listData, Class<T> cl) { | 
|         List list = new ArrayList(); | 
|         for (int i = 0; i < listData.size(); i++) { | 
|             list.add(getBeanFromMap((Map<String, Object>) listData.get(i), cl)); | 
|         } | 
|         return (T) list; | 
|     } | 
|   | 
|     /*** | 
|      * 将Map<String, String>对象转换为JSON字符串 | 
|      * | 
|      * @param params 参数 | 
|      * @return Json字符串 | 
|      */ | 
|   | 
|     public static String getJsonFromMap(Map<String, Object> params) { | 
|         if (params == null || params.size() <= 0) { | 
|             return ""; | 
|         } | 
|         return getJSONObjectFromMap(params).toString(); | 
|     } | 
|   | 
|     public static String getJsontoMap(Map<String, Object> params) { | 
|         GsonBuilder gsonBuilder = new GsonBuilder(); | 
|         gsonBuilder.setLongSerializationPolicy( LongSerializationPolicy.STRING ); | 
|         gsonBuilder.serializeSpecialFloatingPointValues(); | 
|         Gson gson = gsonBuilder.create(); | 
|         String jsonStr = gson.toJson(params); | 
|         return jsonStr; | 
|     } | 
|   | 
|     public static <T> String getJsonbyList(List<T> params) { | 
|   | 
|         Gson gson = new Gson(); | 
|         return gson.toJson(params); | 
|     } | 
|   | 
|   | 
|     /*** | 
|      * 将Map<String, String>对象转换为JSONObject字符串 | 
|      * | 
|      * @param params | 
|      * @return | 
|      */ | 
|     @SuppressWarnings("unchecked") | 
|     private static JSONObject getJSONObjectFromMap(Map<String, Object> params) { | 
|         Set<Entry<String, Object>> entrySet = params.entrySet(); | 
|         JSONObject object = new JSONObject(); | 
|         for (Entry<String, Object> entry : entrySet) { | 
|             try { | 
|                 Object ob = entry.getValue(); | 
|                 if (ob instanceof List) { | 
|                     List list = (List) ob; | 
|                     if (list == null || list.size() == 0) { | 
|                         continue; | 
|                     } | 
|                     JSONArray array = new JSONArray(); | 
|                     for (Object o : list) { | 
|                         if (o instanceof Map) { | 
|                             array.put(getJSONObjectFromMap((Map<String, Object>) o)); | 
|                         } else if (o instanceof List) { | 
|                             JSONArray array1 = new JSONArray(); | 
|                             array1.put(getListFromJson(o.toString())); | 
|                             array.put(array1); | 
|                         } else { | 
|                             array.put(o); | 
|                         } | 
|                     } | 
|                     object.put(entry.getKey(), array); | 
|                 } else if (ob instanceof Map) { | 
|                     object.put(entry.getKey(), getJSONObjectFromMap((Map<String, Object>) ob)); | 
|                 } else { | 
|                     object.put(entry.getKey(), entry.getValue()); | 
|                 } | 
|             } catch (JSONException e) { | 
|                 e.printStackTrace(); | 
|             } | 
|         } | 
|         return object; | 
|     } | 
|   | 
|   | 
|     public static String getJsonFromStringMap(Map<String, String> params) { | 
|         Set<Entry<String, String>> entrySet = params.entrySet(); | 
|         JSONObject object = new JSONObject(); | 
|         for (Entry<String, String> entry : entrySet) { | 
|             try { | 
|                 object.put(entry.getKey(), entry.getValue()); | 
|             } catch (JSONException e) { | 
|                 e.printStackTrace(); | 
|             } | 
|         } | 
|         return object.toString(); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 将json转化为HashMap | 
|      * | 
|      * @param jsonStr 字符串 | 
|      * @return | 
|      */ | 
|     public static HashMap<String, Object> getMapFromJson(String jsonStr) { | 
|         HashMap<String, Object> valueMap = new LinkedHashMap<String, Object>(); | 
|         if (jsonStr == null || "".equals(jsonStr)) { | 
|             return valueMap; | 
|         } | 
|   | 
|         try { | 
|             JSONObject jsonObject = new JSONObject(jsonStr); | 
|             valueMap = getMapFromJsonObject(jsonObject); | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return valueMap; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 转换JsonArray为List<HashMap<String,Object>>. | 
|      * | 
|      * @param jsonArray JsonArray | 
|      * @return | 
|      */ | 
|     public static List<Object> getListFromJsonArray(JSONArray jsonArray) { | 
|         List<Object> list = new ArrayList<Object>(); | 
|         int len = jsonArray.length(); | 
|         try { | 
|             for (int i = 0; i < len; i++) { | 
|                 Object obj = jsonArray.get(i); | 
|                 if (obj instanceof JSONObject) { | 
|                     list.add(getMapFromJsonObject((JSONObject) obj)); | 
|                 } else if (obj instanceof JSONArray) { | 
|                     list.add(getListFromJsonArray(jsonArray)); | 
|                 } else { | 
|   | 
|                     if (obj != null && !TextUtils.isEmpty(obj.toString()) && !"null".equals(obj.toString())) | 
|                         list.add(obj); | 
|                 } | 
|             } | 
|         } catch (JSONException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return list; | 
|     } | 
|   | 
|     /** | 
|      * 转换JSONObject为HashMap<String,Object>. 注:如果json对象的值为null,则默认转换为"". | 
|      * | 
|      * @param jsonObj | 
|      * @return | 
|      */ | 
|     public static HashMap<String, Object> getMapFromJsonObject(JSONObject jsonObj) { | 
|         HashMap<String, Object> map = new LinkedHashMap<String, Object>(); | 
|         Iterator<String> iters = jsonObj.keys(); | 
|         try { | 
|             while (iters.hasNext()) { | 
|                 String key = iters.next(); | 
|                 Object obj = jsonObj.get(key); | 
|                 if (obj instanceof JSONArray) { | 
|                     map.put(key, getListFromJsonArray((JSONArray) obj)); | 
|                 } else if (obj instanceof JSONObject) { | 
|                     map.put(key, getMapFromJsonObject((JSONObject) obj)); | 
|                 } else if (obj instanceof Number) { | 
|                     map.put(key, String.valueOf(obj)); | 
|                 } else if (jsonObj.isNull(key)) { | 
|                     map.put(key, ""); | 
|                 } else { | 
|                     if (obj != null && !TextUtils.isEmpty(obj.toString()) && !"null".equals(obj.toString())) | 
|                         map.put(key, obj); | 
|                 } | 
|             } | 
|         } catch (JSONException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return map; | 
|     } | 
|   | 
|     /** | 
|      * @param str | 
|      * @param clazz | 
|      * @param <T> | 
|      * @return | 
|      */ | 
|     public static <T> List<T> getListFromJson(String str, Class<T> clazz) { | 
|         try { | 
|             Type type = new ParameterizedTypeImpl(clazz); | 
|             List<T> list = new Gson().fromJson(str, type); | 
|             return list; | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * @param str | 
|      * @param <T> | 
|      * @return | 
|      */ | 
|     public static <T> List<T> getListFromJson(String str, Type type) { | 
|         try { | 
|             List<T> list = new Gson().fromJson(str, type); | 
|             return list; | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     private static class ParameterizedTypeImpl implements ParameterizedType { | 
|         Class clazz; | 
|   | 
|         public ParameterizedTypeImpl(Class clz) { | 
|             clazz = clz; | 
|         } | 
|   | 
|         @Override | 
|         public Type[] getActualTypeArguments() { | 
|             return new Type[]{clazz}; | 
|         } | 
|   | 
|         @Override | 
|         public Type getRawType() { | 
|             return List.class; | 
|         } | 
|   | 
|         @Override | 
|         public Type getOwnerType() { | 
|             return null; | 
|         } | 
|   | 
|     } | 
|   | 
|     public static List<Object> getListFromJson(String json) { | 
|         try { | 
|             JSONArray jsonObject = new JSONArray(json); | 
|             return getListFromJsonArray(jsonObject); | 
|   | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /*** | 
|      * 在一个HashMap中查找keyName对应的数据对象,查到的第一个就直接返回了 | 
|      * | 
|      * @param users | 
|      * @param keyName | 
|      * @return | 
|      */ | 
|     @SuppressWarnings("unchecked") | 
|     public static Object getObjectFromJSONMap(Map<String, Object> users, String keyName) { | 
|         if (users == null || users.size() <= 0) | 
|             return null; | 
|         try { | 
|             Set<Entry<String, Object>> set = users.entrySet(); | 
|             for (Entry<String, Object> entry : set) { | 
|                 String key = entry.getKey(); | 
|                 Object value = entry.getValue(); | 
|                 if (key.equalsIgnoreCase(keyName)) | 
|                     return value; | 
|   | 
|                 HashMap<String, Object> map = null; | 
|                 if (value instanceof Map) { | 
|                     map = (HashMap<String, Object>) value; | 
|                     Object object = getObjectFromJSONMap(map, keyName); | 
|                     if (object != null) | 
|                         return object; | 
|                 } | 
|             } | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /** | 
|      * 将json 数组转换为Map 对象 | 
|      * | 
|      * @param jsonString | 
|      * @return | 
|      */ | 
|   | 
|     public static Map<String, Object> getMapForJson(String jsonString) { | 
|   | 
|         JSONObject jsonObject; | 
|         try { | 
|             jsonObject = new JSONObject(jsonString); | 
|             @SuppressWarnings("unchecked") | 
|             Iterator<String> keyIter = jsonObject.keys(); | 
|             String key; | 
|             Object value; | 
|             Map<String, Object> valueMap = new HashMap<String, Object>(); | 
|             while (keyIter.hasNext()) { | 
|                 key = (String) keyIter.next(); | 
|                 value = jsonObject.get(key); | 
|                 valueMap.put(key, value); | 
|             } | 
|   | 
|             return valueMap; | 
|         } catch (JSONException e) { | 
|             e.printStackTrace(); | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|   | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 把json 转换为ArrayList 形式 | 
|      * | 
|      * @return | 
|      */ | 
|   | 
|     public static List<Map<String, Object>> getList(String jsonString) { | 
|         List<Map<String, Object>> list = null; | 
|         try { | 
|             JSONArray jsonArray = new JSONArray(jsonString); | 
|             JSONObject jsonObject; | 
|   | 
|   | 
|             list = new ArrayList<Map<String, Object>>(); | 
|             for (int i = 0; i < jsonArray.length(); i++) { | 
|                 if (jsonArray.get(i) instanceof String) { | 
|                     String data = jsonArray.getString(i); | 
|                     list.add(getMapForJson(data)); | 
|                 } else { | 
|                     jsonObject = jsonArray.getJSONObject(i); | 
|                     list.add(getMapForJson(jsonObject.toString())); | 
|                 } | 
|   | 
|   | 
|             } | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return list; | 
|   | 
|     } | 
|   | 
| //    /** | 
| //     * @param str | 
| //     * @param clazz | 
| //     * @param <T> | 
| //     * @return | 
| //     */ | 
| //    public static <T> List<T> getListByJson(String str, Class<T> clazz) { | 
| //        try { | 
| //            JSONArray jsonArray = new JSONArray(str); | 
| //            List<T> list = new ArrayList<>(); | 
| //            for (int i = 0; i < jsonArray.length(); i++) { | 
| //                list.add(json2Bean(jsonArray.get(i).toString(), clazz)); | 
| //            } | 
| //            return list; | 
| //        } catch (Exception e) { | 
| //            e.printStackTrace(); | 
| //        } | 
| //        return null; | 
| //    } | 
|   | 
| //    /** | 
| //     * @param str | 
| //     * @param clazz | 
| //     * @param <T> | 
| //     * @return | 
| //     */ | 
| //    public static <T> List<T> getListByJson(String str, Class<T> clazz) { | 
| //        try { | 
| //            List<T> list = new ArrayList<>(); | 
| //            Gson gson = new Gson(); | 
| //            list = gson.fromJson(str, new TypeToken<List<T>>() { | 
| //            }.getType()); | 
| //            return list; | 
| //        } catch (Exception e) { | 
| //            e.printStackTrace(); | 
| //        } | 
| //        return null; | 
| //    } | 
|   | 
|     /** | 
|      * 转成list | 
|      * 解决泛型问题 | 
|      * | 
|      * @param json | 
|      * @param cls | 
|      * @param <T> | 
|      * @return | 
|      */ | 
|     public static <T> List<T> getListByJson(String json, Class<T> cls) { | 
|         Gson gson = new Gson(); | 
|         List<T> list = new ArrayList<T>(); | 
|         JsonArray array = new JsonParser().parse(json).getAsJsonArray(); | 
|         for (final JsonElement elem : array) { | 
|             list.add(gson.fromJson(elem, cls)); | 
|         } | 
|         return list; | 
|     } | 
|   | 
|   | 
| //    public static<T> Map<String,Object> getMapFormBean(Class<T> clazz){ | 
| //        JSONObject.parseObject(JSON.toJSONString(object),Map.class); | 
| //        new JSONObject() | 
| //    } | 
|   | 
| } |