Java.Utils:JSON對象工具類

Maven

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.2.60</version>
 </dependency>
package com.bood.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import com.alibaba.fastjson.serializer.ValueFilter;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

/**
 * Alibaba - JSON對象工具類
 * 
 * @author:bood
 * @since:2020/2/9
 */
public final class JsonUtils {

    private JsonUtils() {
    }

    /***
     * 值過濾器
     */
    private static ValueFilter filter = new ValueFilter() {
        @Override
        public Object process(Object obj, String s, Object v) {
            if (v == null) {
                return "";
            }
            return v;
        }
    };
    private static SerializerFeature[] feature = {
            //解決FastJson循環引用的問題
            SerializerFeature.DisableCircularReferenceDetect,
            //輸出值爲null的字段
            SerializerFeature.WriteMapNullValue
    };
    private static SerializeConfig mapping = new SerializeConfig();

    static {
        mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
        // 數據庫的一個時間類型
        mapping.put(Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
    }

    /**
     * 將對象轉換成JSON字符串 --固定時間格式"yyyy-MM-dd HH:mm:ss"
     *
     * @param BO/VO,map,數組,list 對象
     * @return JSON字符串
     * @說明:對bean中有Date類型的數據可以成功轉換成yyyy-MM-dd HH:mm:ss格式的時間類型,例如:"barDate":yyyy-MM-dd HH:mm:ss
     */
    public static String getJsonByObj(Object bean) {
        return getJsonByObj(bean, mapping);
    }

    /**
     * 將對象轉換成JSON字符串 --特定時間格式--所有Key爲小寫
     *
     * @param BO/VO,map,數組,list 對象
     * @return JSON字符串
     * @dateType 時間格式轉換後的字符串格式,例如yyyy-MM-dd HH:mm:ss
     * @說明:對bean中有Date類型的數據可以成功轉換成yyyy-MM-dd HH:mm:ss格式的時間類型,例如:"barDate":yyyy-MM-dd HH:mm:ss
     */
    public static String getJsonByObj(Object bean, String dateType) {
        SerializeConfig zdymapping = new SerializeConfig();
        zdymapping.put(Date.class, new SimpleDateFormatSerializer(dateType));
        return getJsonByObj(bean, zdymapping);
    }

    /**
     * 將對象轉換成JSON字符串 ---效率高一些--不處理key 也不處理循環引用的問題--也不處理時間格式
     *
     * @param BO/VO,map,數組,list 對象
     * @return JSON字符串
     * @說明:對bean中有Date類型的數據可以成功轉換成long格式的時間類型,例如:"barDate":1458268099098
     */
    public static String getJsonDefaultByObj(Object bean) {
        return JSON.toJSONString(bean);
    }

    /**
     * 將JSON數據轉換爲ListBean集合
     *
     * @param <T>
     * @param json  JSON數組數據
     * @param calzz 待轉換的Bean類型 --LinkedCaseInsensitiveMap
     * @return
     */
    public static <T> List<T> getListBean(String json, Class<T> calzz) {
        return JSON.parseArray(json, calzz);
    }

    /**
     * 將JSON數據轉換爲List集合
     *
     * @param <T>
     * @param json  JSON數組數據
     * @param calzz 待轉換的Bean類型 --LinkedCaseInsensitiveMap
     * @return
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public static List getList(String json, Class calzz) {
        return getListBean(json, calzz);
    }

    /**
     * 將JSON數據轉換爲 Java Bea n對象
     *
     * @param json  JSON字符串
     * @param calzz 待轉換的Bean類型--LinkedCaseInsensitiveMap
     * @return
     */
    public static <T> T getObjet(String json, Class<T> calzz) {
        return JSON.parseObject(json, calzz);
    }

    /***
     * 通用封裝--獲取json字符串
     * @param bean 對象
     * @param mappingx 時間類型計劃等
     * @return
     */
    private static String getJsonByObj(Object bean, SerializeConfig mappingx) {
        String json = JSON.toJSONString(bean, mappingx, filter, feature);
        json = stringToJson(json);
        // 所有Key爲小寫
        return json;
    }

    /**
     * 當文本中含有如下特殊字符時,此方法可以成功處理,讓其在前臺被正確解析,注意:此法不能處理單引號
     *
     * @param s
     * @return
     */
    public static String stringToJson(String s) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            switch (c) {
                /*case '\"':
                    sb.append("\\\"");
					break;*/
                // 如果不處理單引號,可以釋放此段代碼,若結合下面的方法處理單引號就必須註釋掉該段代碼
                case '\\':
                    sb.append("\\\\");
                    break;
                case '/':
                    sb.append("\\/");
                    break;
                //退格
                case '\b':
                    sb.append("\\b");
                    break;
                //走紙換頁
                case '\f':
                    sb.append("\\f");
                    break;
                //換行
                case '\n':
                    sb.append("\\n");
                    break;
                //回車
                case '\r':
                    sb.append("\\r");
                    break;
                //橫向跳格
                case '\t':
                    sb.append("\\t");
                    break;
                default:
                    sb.append(c);
            }
        }
        return sb.toString();
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章