Java json 轉(zhuǎn)換工具類

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

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;

/**
 * JSON對(duì)象工具類
 * 
 * @author shuang  
 */
public final class JsonUtil {
    private JsonUtil() {}
    /***
     * 值過(guò)濾器
     */
    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循環(huán)引用的問(wèn)題
        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"));//數(shù)據(jù)庫(kù)的一個(gè)時(shí)間類型
    }
    /**
     * 將對(duì)象轉(zhuǎn)換成JSON字符串 --固定時(shí)間格式"yyyy-MM-dd HH:mm:ss"
     * @param BO/VO,map,數(shù)組,list 對(duì)象
     * @return JSON字符串
     * @說(shuō)明:對(duì)bean中有Date類型的數(shù)據(jù)可以成功轉(zhuǎn)換成yyyy-MM-dd HH:mm:ss格式的時(shí)間類型,例如:"barDate":yyyy-MM-dd HH:mm:ss
     */
    public static String getJsonByObj(Object bean) {
        return getJsonByObj(bean,mapping);
    }
    /**
     * 將對(duì)象轉(zhuǎn)換成JSON字符串 --特定時(shí)間格式--所有Key為小寫
     * @param BO/VO,map,數(shù)組,list 對(duì)象
     * @dateType 時(shí)間格式轉(zhuǎn)換后的字符串格式,例如yyyy-MM-dd HH:mm:ss
     * @return JSON字符串
     * @說(shuō)明:對(duì)bean中有Date類型的數(shù)據(jù)可以成功轉(zhuǎn)換成yyyy-MM-dd HH:mm:ss格式的時(shí)間類型,例如:"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);
    }
    /**
     * 將對(duì)象轉(zhuǎn)換成JSON字符串 ---效率高一些--不處理key 也不處理循環(huán)引用的問(wèn)題--也不處理時(shí)間格式
     * @param BO/VO,map,數(shù)組,list 對(duì)象
     * @return JSON字符串
     * @說(shuō)明:對(duì)bean中有Date類型的數(shù)據(jù)可以成功轉(zhuǎn)換成long格式的時(shí)間類型,例如:"barDate":1458268099098
     */
    public static String getJsonDefaultByObj(Object bean) {
        return JSON.toJSONString(bean);
    }
    /**
     * 將JSON數(shù)據(jù)轉(zhuǎn)換為L(zhǎng)istBean集合
     * @param <T>
     * @param json JSON數(shù)組數(shù)據(jù)
     * @param calzz 待轉(zhuǎn)換的Bean類型 --LinkedCaseInsensitiveMap
     * @return 
     */
    public static <T> List<T> getListBean(String json, Class<T> calzz) {
        return JSON.parseArray(json, calzz);
    }
    /**
     * 將JSON數(shù)據(jù)轉(zhuǎn)換為L(zhǎng)ist集合
     * @param <T>
     * @param json JSON數(shù)組數(shù)據(jù)
     * @param calzz 待轉(zhuǎn)換的Bean類型 --LinkedCaseInsensitiveMap
     * @return 
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static List getList(String json, Class calzz) {
        return getListBean(json, calzz);
    }
    /**
     * 將JSON數(shù)據(jù)轉(zhuǎn)換為 Java Bea n對(duì)象 
     * @param json JSON字符串
     * @param calzz 待轉(zhuǎn)換的Bean類型--LinkedCaseInsensitiveMap
     * @return
     */
    public static <T> T getObjet(String json,Class<T> calzz) {
        return JSON.parseObject(json, calzz) ;
    }
    /***
     * 通用封裝--獲取json字符串
     * @param bean 對(duì)象
     * @param mappingx 時(shí)間類型計(jì)劃等
     * @return
     */
    private static String getJsonByObj(Object bean,SerializeConfig mappingx){
        String json=JSON.toJSONString(bean,mappingx,filter,feature);
        json=stringToJson(json);
        return json; //所有Key為小寫
    }

    /**
     * 當(dāng)文本中含有如下特殊字符時(shí),此方法可以成功處理,讓其在前臺(tái)被正確解析,注意:此法不能處理單引號(hào)
     * @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 '\\':   //如果不處理單引號(hào),可以釋放此段代碼,若結(jié)合下面的方法處理單引號(hào)就必須注釋掉該段代碼
                  sb.append("\\\\");
                  break;
                case '/':
                    sb.append("\\/");
                    break;
                case '\b':      //退格
                    sb.append("\\b");
                    break;
                case '\f':      //走紙換頁(yè)
                    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();
    }


}

作者:云軟科技-檔案管理系統(tǒng) JornTang (微信同號(hào))

本篇文章由一文多發(fā)平臺(tái)ArtiPub自動(dòng)發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容