json工具類
/**
* @Description JsonUtil.java
* @author 張軍
* @date 2016-7-6 下午1:29:18
* @version V1.0
*/
package zj.json;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import zj.date.bean.DateTime;
import zj.json.bean.DateFormatSerializer;
import zj.json.bean.ToJSONString;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.NameFilter;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.PropertyPreFilter;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializeWriter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;
/**
* json工具類
*
* @author 張軍
* @date 2016-7-6 下午1:29:18
* @version V1.0
* @author SHNKCS 張軍 {@link <a target=_blank href="http://www.dlhighland.cn">張軍個人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
*/
public class JsonUtil implements Serializable {
private static final long serialVersionUID = 1L;
public static SerializeConfig MAPPING = new SerializeConfig();
static {
register();
}
/**
* 轉(zhuǎn)換為json字符串
*
* @param value
* 轉(zhuǎn)換對象值
* @author 張軍
* @date 2015-11-03 21:59:00
* @modifiyNote
* @version 1.0
* @return
*/
public static String toJSONString(Object value) {
return toJSONString(value, null);
}
/**
* 轉(zhuǎn)換為json字符串
*
* @param object
* 轉(zhuǎn)換對象值
* @param toJson
* 參數(shù)對象
* @author 張軍
* @date 2015-11-03 21:59:00
* @modifiyNote
* @version 1.0
* @return
*/
public static final String toJSONString(Object object, ToJSONString toJson) {
if (toJson == null) {
return JSON.toJSONString(object, MAPPING);
}
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = null;
serializer = new JSONSerializer(out, MAPPING);
if (toJson.prettyFormat) {
toJson.features.add(SerializerFeature.PrettyFormat);
}
for (SerializerFeature feature : toJson.features) {
serializer.config(feature, true);
}
serializer.config(SerializerFeature.WriteDateUseDateFormat, true);
if (toJson.filter != null) {
if (toJson.filter instanceof PropertyPreFilter) {
serializer.getPropertyPreFilters().add((PropertyPreFilter) toJson.filter);
}
if (toJson.filter instanceof NameFilter) {
serializer.getNameFilters().add((NameFilter) toJson.filter);
}
if (toJson.filter instanceof ValueFilter) {
serializer.getValueFilters().add((ValueFilter) toJson.filter);
}
if (toJson.filter instanceof PropertyFilter) {
serializer.getPropertyFilters().add((PropertyFilter) toJson.filter);
}
}
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}
/**
* 注冊日期格式化
*
* @author 張軍
* @date 2015-11-03 21:59:00
* @modifiyNote
* @version 1.0
* @return 批量集合值
*/
private static void register() {
MAPPING.put(Date.class, new DateFormatSerializer());
MAPPING.put(DateTime.class, new DateFormatSerializer());
MAPPING.put(Timestamp.class, new DateFormatSerializer());
}
}json工具類參數(shù)對象
/**
* @Description JsonUtil.java
* @author 張軍
* @date 2016-7-6 下午1:29:18
* @version V1.0
*/
package zj.json.bean;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* json工具類參數(shù)對象
*
* @author 張軍
* @date 2016-7-6 下午1:29:18
* @version V1.0
* @author SHNKCS 張軍 {@link <a target=_blank href="http://www.shanghaijiadun.com">上海加盾信息科技有限公司</a> <a target=_blank href="http://www.dlhighland.cn">張軍個人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
*/
public class ToJSONString implements Serializable {
private static final long serialVersionUID = 1L;
/** 過慮屬性 **/
public SerializeFilter filter;
/** 數(shù)組 **/
public Set<SerializerFeature> features = new HashSet<SerializerFeature>();
/** 是否格式化json串 **/
public boolean prettyFormat;
/**
* 構(gòu)造方法默認(rèn)參數(shù)
*/
public ToJSONString() {
// 在springMVC中必須移除pageModel.remove("org.springframework.validation.BindingResult.[user當(dāng)前類]");
// FastJson提供了SerializerFeature.DisableCircularReferenceDetect
// 這個序列化選項,用來關(guān)閉引用檢測。關(guān)閉引用檢測后,重復(fù)引用對象時就不會被$ref代替,但是在循環(huán)引用時也會導(dǎo)致StackOverflowError異常。
this.features.add(SerializerFeature.DisableCircularReferenceDetect);
}
}json屬性過慮器
package zj.json.bean;
import java.util.HashSet;
import java.util.Set;
import zj.check.util.CheckUtil;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.PropertyPreFilter;
/**
* json屬性過慮器
*
* @author 張軍
* @date 2016-7-6 下午1:29:18
* @version V1.0
* @author SHNKCS 張軍 {@link <a target=_blank href="http://www.dlhighland.cn">張軍個人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
*/
public class SimplePropertyPreFilter implements PropertyPreFilter {
private final Class<?> clazz;
// 包含的屬性
private final Set<String> includes = new HashSet<String>();
// 排除的屬性
private final Set<String> excludes = new HashSet<String>();
public SimplePropertyPreFilter(String... properties) {
this(null, properties);
}
public SimplePropertyPreFilter(Class<?> clazz, String... properties) {
super();
this.clazz = clazz;
for (String item : properties) {
if (CheckUtil.isNotNull(item)) {
this.includes.add(item);
}
}
}
public Class<?> getClazz() {
return clazz;
}
public Set<String> getIncludes() {
return includes;
}
public Set<String> getExcludes() {
return excludes;
}
/**
* 是否應(yīng)用json字段
*
* @param serializer
* @see com.alibaba.fastjson.serializer.JSONSerializer
* @param source
* 被序列化的對象
* @param name
* 被序列化的對象中的屬性
* @author 張軍
* @date 2015-11-03 21:59:00
* @modifiyNote
* @version 1.0
* @return true:包含屬性 false:不包含屬性
*/
public boolean apply(JSONSerializer serializer, Object source, String name) {
if (source == null) {
return true;
}
if (clazz != null && !clazz.isInstance(source)) {
return true;
}
if (this.excludes.contains(name)) {
return false;
}
if (includes.size() == 0 || includes.contains(name)) {
return true;
}
return false;
}
}json日期格式化類
/**
* @Description DateFormatSerializer.java
* @author 張軍
* @date 2016-7-6 下午4:37:19
* @version V1.0
*/
package zj.json.bean;
import java.io.IOException;
import java.lang.reflect.Type;
import java.sql.Timestamp;
import zj.check.util.CheckUtil;
import zj.date.bean.DateTime;
import zj.date.util.DateUtil;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;
/**
* json日期格式化類
*
* @author 張軍
* @date 2016-7-6 下午1:29:18
* @version V1.0
* @author SHNKCS 張軍 {@link <a target=_blank href="http://www.shanghaijiadun.com">上海加盾信息科技有限公司</a> <a target=_blank href="http://www.dlhighland.cn">張軍個人網(wǎng)站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
*/
public class DateFormatSerializer implements ObjectSerializer {
private String pattern;
public DateFormatSerializer() {
}
public DateFormatSerializer(String pattern) {
this.pattern = pattern;
}
/**
* 重寫write方法
*/
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
if (object == null) {
serializer.getWriter().writeNull();
return;
}
String text = "";
if (CheckUtil.isNull(pattern)) {
// 自動判斷
if (object instanceof DateTime || object instanceof Timestamp) {
text = DateUtil.dateParse(object, "yyyy-MM-dd HH:mm:ss");
} else if (object instanceof java.util.Date) {
//java.sql.Date繼承自java.util.Date
text = DateUtil.dateParse(object, "yyyy-MM-dd");
} else {
// 默認(rèn)情況下
text = DateUtil.dateParse(object, "yyyy-MM-dd HH:mm:ss");
}
} else {
text = DateUtil.dateParse(object, pattern);
}
serializer.write(text);
}
}
本文為張軍原創(chuàng)文章,轉(zhuǎn)載無需和我聯(lián)系,但請注明來自張軍的軍軍小站,個人博客http://www.dlhighland.cn
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

