隨手記錄一些雜項(Gson篇)

用慣了fast json 一時半會兒還真的不肯意用別的序列化組件java

後來公司安全組說fastjson的注入問題一直沒有獲得良好的解決,因此只能棄用,統一換成Gsonjson

Gson使用起來其實也沒那麼麻煩,一般能夠直接實例化一個api

Gson gson = new Gson();

或者安全

Gson gson = new GsonBuilder();

再追加一些序列化的規則ui

 

而後再本身翻閱gson提供的api差很少就都懂得使用方法了code

也能夠本身寫一些經常使用的組合成一個util複用orm

public class GsonUtil {

    private static JsonParser jsonParser=new JsonParser();   
    private static final Gson GSON;
    private static final Gson GSON_NULL; // 不過濾空值

    static {
        GSON = new GsonBuilder().enableComplexMapKeySerialization() //當Map的key爲複雜對象時,須要開啓該方法
//                .serializeNulls() //當字段值爲空或null時,依然對該字段進行轉換
//                .excludeFieldsWithoutExposeAnnotation()//打開Export註解,但打開了這個註解,反作用,要轉換和不轉換都要加註解
                .setDateFormat("yyyy-MM-dd HH:mm:ss")//序列化日期格式  "yyyy-MM-dd"
//                .setPrettyPrinting() //自動格式化換行
                .disableHtmlEscaping() //防止特殊字符出現亂碼
                .create();
        GSON_NULL = new GsonBuilder().enableComplexMapKeySerialization() //當Map的key爲複雜對象時,須要開啓該方法
                .serializeNulls() //當字段值爲空或null時,依然對該字段進行轉換
//                .excludeFieldsWithoutExposeAnnotation()//打開Export註解,但打開了這個註解,反作用,要轉換和不轉換都要加註解
                .setDateFormat("yyyy-MM-dd HH:mm:ss")//序列化日期格式  "yyyy-MM-dd"
//                .setPrettyPrinting() //自動格式化換行
                .disableHtmlEscaping() //防止特殊字符出現亂碼
                .create();
    }

    //獲取gson解析器
    public static Gson getGson() {
        return GSON;
    }

    //獲取gson解析器 有空值 解析
    public static Gson getWriteNullGson() {
        return GSON_NULL;
    }


    /**
     * 根據對象返回json  過濾空值字段
     */
    public static String toNotNullJsonString(Object object) {
        return GSON.toJson(object);
    }

    /**
     * 根據對象返回json  不過濾空值字段
     */
    public static String toJsonString(Object object) {
        return GSON_NULL.toJson(object);
    }


    /**
     * 將字符串轉化對象
     *
     * @param json     源字符串
     * @param classOfT 目標對象類型
     * @param <T>
     * @return
     */
    public static <T> T strToJavaBean(String json, Class<T> classOfT) {
        return GSON.fromJson(json, classOfT);
    }

    /**
     * 將json轉化爲對應的實體對象
     * new TypeToken<List<T>>() {}.getType()
     * new TypeToken<Map<String, T>>() {}.getType()
     * new TypeToken<List<Map<String, T>>>() {}.getType()
     */
    public static <T> T fromJson(String json, Type typeOfT) {
        return GSON.fromJson(json, typeOfT);
    }

    /**
     * 轉成list
     *
     * @param gsonString
     * @param cls
     * @return
     */
    public static <T> List<T> strToList(String gsonString, Class<T> cls) {
        return GSON.fromJson(gsonString, new TypeToken<List<T>>() {
        }.getType());
    }

    /**
     * 轉成list中有map的
     *
     * @param gsonString
     * @return
     */
    public static <T> List<Map<String, T>> strToListMaps(String gsonString) {
        return GSON.fromJson(gsonString, new TypeToken<List<Map<String, String>>>() {
        }.getType());
    }

    /**
     * 轉成map
     *
     * @param gsonString
     * @return
     */
    public static <T> Map<String, T> strToMaps(String gsonString) {
        return GSON.fromJson(gsonString, new TypeToken<Map<String, T>>() {
        }.getType());
    }


    /**
     * jsonStr轉JsonObject
     */
    public static JsonObject string2Object(String jsonStr) {
        return jsonParser.parse(jsonStr).getAsJsonObject();
    }


    /**
     * jsonStr轉JsonArray
     */
    public static JsonArray string2Array(String jsonStr) {
        return jsonParser.parse(jsonStr).getAsJsonArray();
    }


  
}
相關文章
相關標籤/搜索