JAVA对象转换为JSON时日期格式转换处理

PS→无奈:受思深处宜先退,得意浓时便可休。

版权声明:本文为博主原创文章,未经博主允许不得转载。

今天在返回json对象到前端时发现前端接收到的数据里面的时间格式被拆开了,原因如下:

        默认JSON对DATE类型会转换成一个多属性对象, 而不是单独的一个字符串, 在某些应用处理上不是很方便,  可以利用JsonValueProcessor来实现日期的转换.

 默认格式:

"createDate":{"nanos":0

          ,"time":1371721834000

          ,"minutes":50

          ,"seconds":34

          ,"hours":17

          ,"month":5

          ,"year":113

          ,"timezoneOffset":-480,"day":4

          ,"date":20

          },

此格式当然不是我们前端要展示的格式,所以我找各种方法解决了一下,引框架包含了hibernate,因此特记录一下。

转换之后的格式:"createDate":"2013-06-20 17:50:34"

后台直接以此返回数据的话,后台会报数据转换错误:
SurveyDirectory survey=surveyDirectoryManager.getSurvey(id);
JSONObject jsonObject=JSONObject.fromObject(survey);
response.getWriter().println(jsonObject.toString());
解决办法:使用hibernate延时加载 设置

JsonConfig cfg = new JsonConfig();  
  
cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});  

时间格式问题解决方案:转换时间格式

1.首先要在项目里新增一个DateJsonValueProcessor类:

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

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

/** 
 * JSON日期格式转换
 * 
*/
public class DateJsonValueProcessor implements JsonValueProcessor
{
    private String format = "yyyy-MM-dd HH:mm:ss";

    public DateJsonValueProcessor()
    {

    }

    public DateJsonValueProcessor(String format)
    {

        this.format = format;
    }

    public Object processArrayValue(Object value, JsonConfig jsonConfig)
    {

        String[] obj = {};
        if (value instanceof Date[])
        {
            SimpleDateFormat sf = new SimpleDateFormat(format);
            Date[] dates = (Date[]) value;
            obj = new String[dates.length];
            for (int i = 0; i < dates.length; i++)
            {
                obj[i] = sf.format(dates[i]);
            }
        }
        return obj;
    }

    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig)
    {

        if (value instanceof Date)
        {
            String str = new SimpleDateFormat(format).format((Date) value);
            return str;
        }
        return value;
    }

    public String getFormat()
    {

        return format;
    }

    public void setFormat(String format)
    {

        this.format = format;
    }

}

2.其次在需要调用的方法里面使用如下代码
 

 cfg.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
 JSONObject jsonObject=JSONObject.fromObject(survey,cfg);
 response.getWriter().println(jsonObject.toString());

最终解决问题方案如下案例:

 @ResponseBody
 @RequestMapping(value = "/my-survey!attrs")
 public String attrs(@RequestParam("id")String id) throws Exception {
    HttpServletResponse response=SpringUtils.getResponse();
    response.setCharacterEncoding("UTF-8");
    try{
      SurveyDirectory survey=surveyDirectoryManager.getSurvey(id);
      JsonConfig cfg = new JsonConfig();
      cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
      cfg.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor());
      JSONObject jsonObject=JSONObject.fromObject(survey,cfg);
      response.getWriter().println(jsonObject.toString());
    }catch(Exception e){
       e.printStackTrace();
    }
    return null;
}

至此JSON日期格式转换问题完美解决!!!

你可能感兴趣的:(java)