JSONObject.fromObject 转换JSON字符串Map及javabean时间处理的问题

本文解决了一个关于JavaBean转换为JSON字符串时日期格式显示异常的问题。通过自定义UtilDateProcessor类处理日期格式,实现了将日期从默认的内部格式转换为指定的“yyyy-MM-dd”格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天的项目开发过程中遇到一个比较棘手的问题,主要是通用导出类中,使用了一个javabean转换成json字符串的问题,javabean中一个日期格式是“yyyy-MM-dd”,转成json以后的格式,变成了updatetime={day=24,year=2012...} 样子的。

我们可以看出JSONObject net.sf.json.JSONObject.fromObject(Object object, JsonConfig jsonConfig)还接受一个JsonConfig对象,那么我们就应该从这里入手。

1、写一个value处理类(UtilDateProcessor .java)

package cn.qazit.common.utils;

import java.text.SimpleDateFormat;  
import java.util.Date;  
  

import java.util.Locale;

import net.sf.json.JsonConfig;  
import net.sf.json.processors.JsonValueProcessor;  


public class UtilDateProcessor implements JsonValueProcessor {

    /**
     * /**
     * 字母 日期或时间元素 表示 示例 <br>
     * G Era 标志符 Text AD <br>
     * y 年 Year 1996; 96 <br>
     * M 年中的月份 Month July; Jul; 07 <br>
     * w 年中的周数 Number 27 <br>
     * W 月份中的周数 Number 2 <br>
     * D 年中的天数 Number 189 <br>
     * d 月份中的天数 Number 10 <br>
     * F 月份中的星期 Number 2 <br>
     * E 星期中的天数 Text Tuesday; Tue<br>
     * a Am/pm 标记 Text PM <br>
     * H 一天中的小时数(0-23) Number 0 <br>
     * k 一天中的小时数(1-24) Number 24<br>
     * K am/pm 中的小时数(0-11) Number 0 <br>
     * h am/pm 中的小时数(1-12) Number 12 <br>
     * m 小时中的分钟数 Number 30 <br>
     * s 分钟中的秒数 Number 55 <br>
     * S 毫秒数 Number 978 <br>
     * z 时区 General time zone Pacific Standard Time; PST; GMT-08:00 <br>
     * Z 时区 RFC 822 time zone -0800 <br>
     */
    private String format = "yyyy-MM-dd "; //自定义时间格式化的样式 
    
    public UtilDateProcessor() {  
        super();  
        // TODO Auto-generated constructor stub  
    }  
      
    public UtilDateProcessor(String format) {  
        this.format = format;  
    } 
    @Override
    public Object processArrayValue(Object arg0, JsonConfig arg1) {
        String[] obj = {};  
        if (arg0 instanceof Date[]) {  
            SimpleDateFormat sf = new SimpleDateFormat(format);  
            Date[] dates = (Date[]) arg0;  
            obj = new String[dates.length];  
            for (int i = 0; i < dates.length; i++) {  
                obj[i] = sf.format(dates[i]);  
            }  
        }  
        return obj;  
    }

    @Override
    public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
        return process(arg1);
    }
    
    private Object process(Object value) {
        try {
            if (value instanceof Date) {
                SimpleDateFormat sdf = new SimpleDateFormat(format,
                        Locale.UK);
                return sdf.format((Date) value);
            }
            return value == null ? "" : value.toString();
        } catch (Exception e) {
            return "";
        }

    }

    public String getFormat() {
        return format;
    }

    public void setFormat(String format) {
        this.format = format;
    }
    
}
 

2、在实例类中,加上以下代码

   JsonConfig jsonConfig = new JsonConfig(); 
 jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class,new UtilDateProcessor("yyyy-MM-dd"));
   JSONObject jsonObject = JSONObject.fromObject(src, jsonConfig);

   打印如下输出:

   [{QHSHI=重庆市, JCBGRQ=2016-12-22 00:00:00.0    .....}]

 

转载于:https://my.oschina.net/maojindaoGG/blog/811934

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值