json工具类

张军 6126 0

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.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<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();
	}

	/**
	 * 转换为json字符串
	 * 
	 * @param value
	 *            转换对象值
	 * @author 张军
	 * @date 2015-11-03 21:59:00
	 * @modifiyNote
	 * @version 1.0
	 * @return
	 */
	public static String toJSONString(Object value) {
		return toJSONString(value, null);
	}

	/**
	 * 转换为json字符串
	 * 
	 * @param object
	 *            转换对象值
	 * @param toJson
	 *            参数对象
	 * @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工具类参数对象

/**
 * @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工具类参数对象
 * 
 * @author 张军
 * @date 2016-7-6 下午1:29:18
 * @version V1.0
 * @author SHNKCS 张军 {@link <a target=_blank href="http://www.shanghaijiadun.com">上海加盾信息科技有限公司</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<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;
	/** 数组 **/
	public Set<SerializerFeature> features = new HashSet<SerializerFeature>();
	/** 是否格式化json串 **/
	public boolean prettyFormat;

	/**
	 * 构造方法默认参数
	 */
	public ToJSONString() {
		// 在springMVC中必须移除pageModel.remove("org.springframework.validation.BindingResult.[user当前类]");
		// FastJson提供了SerializerFeature.DisableCircularReferenceDetect
		// 这个序列化选项,用来关闭引用检测。关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致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.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<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;
	}

	/**
	 * 是否应用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>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<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 {
				// 默认情况下
				text = DateUtil.dateParse(object, "yyyy-MM-dd HH:mm:ss");
			}
		} else {
			text = DateUtil.dateParse(object, pattern);
		}
		serializer.write(text);
	}

}





更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论