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

    GsonUtil-工具类 是把Google提供的Gons进行了方法封装,提供了关于一些常用的Gons使用的公共方法;

    package common.library.utils;
    
    import android.text.TextUtils;
    
    import com.google.gson.Gson;
    import com.google.gson.JsonArray;
    import com.google.gson.JsonElement;
    import com.google.gson.JsonParser;
    import com.google.gson.reflect.TypeToken;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @Author Liudeli
     * @Describe: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("对象不能为空");
            }
        }
    
    }
  • 相关阅读:
    nginx安装
    Mybatis使用generator自动生成映射配置文件信息
    Mysql报错Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
    JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
    js获取select标签选中的值
    linux下使用ffmpeg将amr转成mp3
    String与InputStream互转的几种方法
    javascript,检测对象中是否存在某个属性
    SQL语句在查询分析器中可以执行,代码中不能执行
    shell实现SSH自动登陆
  • 原文地址:https://www.cnblogs.com/android-deli/p/10170126.html
Copyright © 2011-2022 走看看