/** 
 | 
 * 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() 
 | 
//    } 
 | 
  
 | 
} 
 |