json日期格式处理

 

问题描述:

    java里面时间类型转换成json数据就成这样了:
"createTime":{"date":30,"day":3,"hours":15,"minutes":14,"month":3,"nanos":0,"seconds"
:38,"time":1209539678000,"timezoneOffset":-480,"year":108}


期望的结果:

       将date转化成yyyy-MM-dd形式

 

解决方案:

注册时间字段处理器,使用jsonconfig:

JsonConfig cfg = new JsonConfig();
cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//设置自包含我也不知道有什么卵用
cfg.registerJsonValueProcessor(Date.class, new JsonUtil("yyyy-MM-dd HH:mm:ss"));
String json  = JSONObject.fromObject(m,cfg).toString();
System.err.println(json);

JsonValueProcessor 在使用时需要对其进行实现 重写processArrayValue processObjectValue两个方法 

 

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class JsonUtil implements JsonValueProcessor {
 
    /** * 默认的日期转换格式. */
    public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
 
    /** * 日期转换器. */
    private DateFormat dateFormat;
 
    /**
     * 构造方法.
     *
     * @param datePattern 日期格式
     */
    public JsonUtil(String datePattern) {
        try {
            dateFormat = new SimpleDateFormat(datePattern);
        } catch (Exception ex) {
            dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
        }
    }
    /**
     * 默认构造方法
     * 创建一个新的实例 DatejsJsonValueProcessor.  
     *
     */
    public JsonUtil() {
            dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
    }
 
    /**
     * 转换数组
     * @param value Object
     * @param jsonConfig 配置
     * @return Object
     */
    @Override
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
        return process(value);
    }
 
    /**
     * 转换对象.
     * @param key String
     * @param value Object
     * @param jsonConfig 配置
     * @return Object
     */
    @Override
    public Object processObjectValue(String key, Object value,
        JsonConfig jsonConfig) {
        return process(value);
    }
 
    /**
     * 格式化日期.
     * @param value Object
     * @return Object
     */
    private Object process(Object value) {
        try {
        	/*if(value instanceof BigDecimal){
        		return ((BigDecimal)value).toString();
        	}else */if(value instanceof Calendar){
                return dateFormat.format(new Timestamp(((java.util.Calendar) value).getTimeInMillis()));
            }else{
                return dateFormat.format((Date)value);
            }          
        } catch (Exception ex) {
            return null;
        }
    }
}

 

如果不复用可采用内部类的方式 

JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
	// 自定义日期格式
	SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

	@Override
	/**
	 * 处理单个Date对象
	 */
	public Object processObjectValue(String propertyName, Object date, JsonConfig config) {
		return simpleDateFormat.format(date);
	}

	@Override
	/** * 处理数组中的Date对象 */
	public Object processArrayValue(Object date, JsonConfig config) {
		return simpleDateFormat.format(date);
	}
});

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值