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ā)布