zoukankan      html  css  js  c++  java
  • Android-GsonUtil工具类

    JSON解析封装相关工具类

    public class GsonUtil {
    
        private static Gson gson = null;
        static {
            if (gson == null) {
                gson = new Gson();
            }
        }
    
        private GsonUtil() {
        }
    
        /**
         * 转成json
         *
         * @param object
         * @return
         */
        public static String gsonString(Object object) {
            String gsonString = null;
            if (gson != null) {
                gsonString = gson.toJson(object);
            }
            return gsonString;
        }
    
        /**
         * 转成bean
         *
         * @param gsonString
         * @param cls
         * @return
         */
        public static <T> T gsonToBean(String gsonString, Class<T> cls) {
            T t = null;
            if (gson != null) {
                t = gson.fromJson(gsonString, cls);
            }
            return t;
        }
    
        /**
         * 转成list
         * 泛型在编译期类型被擦除导致报错
         * @param gsonString
         * @param cls
         * @return
         */
        public static <T> List<T> gsonToList(String gsonString, Class<T> cls) {
            List<T> list = null;
            if (gson != null) {
                list = gson.fromJson(gsonString, new TypeToken<List<T>>() {
                }.getType());
            }
            return list;
        }
    
        /**
         * 转成list
         * 解决泛型问题
         * @param json
         * @param cls
         * @param <T>
         * @return
         */
        public static  <T> List<T> jsonToList(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;
        }
    
    
        /**
         * 转成list中有map的
         *
         * @param gsonString
         * @return
         */
        public static <T> List<Map<String, T>> gsonToListMaps(String gsonString) {
            List<Map<String, T>> list = null;
            if (gson != null) {
                list = gson.fromJson(gsonString,
                        new TypeToken<List<Map<String, T>>>() {
                        }.getType());
            }
            return list;
        }
    
        /**
         * 转成map的
         *
         * @param gsonString
         * @return
         */
        public static <T> Map<String, T> gsonToMaps(String gsonString) {
            Map<String, T> map = null;
            if (gson != null) {
                map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
                }.getType());
            }
            return map;
        }
    
        // -------
    
        /**
         * 按章节点得到相应的内容
         * @param jsonString json字符串
         * @param note 节点
         * @return 节点对应的内容
         */
        public static String getNoteJsonString(String jsonString,String note){
            if(TextUtils.isEmpty(jsonString)){
                throw new RuntimeException("json字符串");
            }
            if(TextUtils.isEmpty(note)){
                throw new RuntimeException("note标签不能为空");
            }
            JsonElement element = new JsonParser().parse(jsonString);
            if(element.isJsonNull()){
                throw new RuntimeException("得到的jsonElement对象为空");
            }
            return element.getAsJsonObject().get(note).toString();
        }
    
        /**
         * 按照节点得到节点内容,然后传化为相对应的bean数组
         * @param jsonString 原json字符串
         * @param note 节点标签
         * @param beanClazz 要转化成的bean class
         * @return 返回bean的数组
         */
        public static <T> List<T> parserJsonToArrayBeans(String jsonString,String note,Class<T> beanClazz){
            String noteJsonString = getNoteJsonString(jsonString,note);
            return parserJsonToArrayBeans(noteJsonString,beanClazz);
        }
        /**
         * 按照节点得到节点内容,转化为一个数组
         * @param jsonString json字符串
         * @param beanClazz 集合里存入的数据对象
         * @return 含有目标对象的集合
         */
        public static <T> List<T> parserJsonToArrayBeans(String jsonString,Class<T> beanClazz){
            if(TextUtils.isEmpty(jsonString)){
                throw new RuntimeException("json字符串为空");
            }
            JsonElement jsonElement = new JsonParser().parse(jsonString);
            if(jsonElement.isJsonNull()){
                throw new RuntimeException("得到的jsonElement对象为空");
            }
            if(!jsonElement.isJsonArray()){
                throw new RuntimeException("json字符不是一个数组对象集合");
            }
            JsonArray jsonArray = jsonElement.getAsJsonArray();
            List<T> beans = new ArrayList<T>();
            for (JsonElement jsonElement2: jsonArray) {
                T bean = new Gson().fromJson(jsonElement2, beanClazz);
                beans.add(bean);
            }
            return beans;
        }
    
        /**
         * 把相对应节点的内容封装为对象
         * @param jsonString json字符串
         * @param clazzBean  要封装成的目标对象
         * @return 目标对象
         */
        public static <T> T parserJsonToArrayBean(String jsonString,Class<T> clazzBean){
            if(TextUtils.isEmpty(jsonString)){
                throw new RuntimeException("json字符串为空");
            }
            JsonElement jsonElement = new JsonParser().parse(jsonString);
            if(jsonElement.isJsonNull()){
                throw new RuntimeException("json字符串为空");
            }
            if(!jsonElement.isJsonObject()){
                throw new RuntimeException("json不是一个对象");
            }
            return new Gson().fromJson(jsonElement, clazzBean);
        }
        /**
         * 按照节点得到节点内容,转化为一个数组
         * @param jsonString json字符串
         * @param note json标签
         * @param clazzBean 集合里存入的数据对象
         * @return 含有目标对象的集合
         */
        public static <T> T parserJsonToArrayBean(String jsonString,String note,Class<T> clazzBean){
            String noteJsonString = getNoteJsonString(jsonString, note);
            return parserJsonToArrayBean(noteJsonString, clazzBean);
        }
    
        /**
         * 把bean对象转化为json字符串
         * @param obj bean对象
         * @return 返回的是json字符串
         */
        public static String toJsonString(Object obj){
            if(obj!=null){
                return new Gson().toJson(obj);
            }else{
                throw new RuntimeException("对象不能为空");
            }
        }
    
    }
  • 相关阅读:
    Android 主题theme说明 摘记
    Android开发 去掉标题栏方法 摘记
    安卓项目五子棋代码详解(二)
    关于 ake sure class name exists, is public, and has an empty constructor that is public
    百度地图3.0实现图文并茂的覆盖物
    android onSaveInstanceState()及其配对方法。
    关于集成科大讯飞语音识别的 一个问题总结
    android 关于 webview 控制其它view的显示 以及更改view数据失败的问题总结
    C# 解析 json Newtonsoft果然强大,代码写的真好
    c#数据类型 与sql的对应关系 以及 取值范围
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322148.html
Copyright © 2011-2022 走看看