使用JSONObject.fromObject toBean方法 属性类型为 data Timestamp 的处理

前端之家收集整理的这篇文章主要介绍了使用JSONObject.fromObject toBean方法 属性类型为 data Timestamp 的处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对JSONObject.fromObject 的处理

1.扩展JsonValueProcessor接口(注意对null的处理)

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

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

/***
 * 将Bean中的Timestamp转换为json中的日期字符串
 * @author dxswzj@163.com
 * */
public class DateJsonValueProcessor implements JsonValueProcessor {
    public static final String Default_DATE_PATTERN ="yyyy-MM-dd";
    private DateFormat dateFormat ;
    public DateJsonValueProcessor(String datePattern){
        try{
            dateFormat  = new SimpleDateFormat(datePattern);}
        catch(Exception e ){
            dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);
        }
    }
    public Object processArrayValue(Object value,JsonConfig jsonConfig) {
        if(null!=value){
            return process(value);
        }else{
            return "";
        }
    }
    public Object processObjectValue(String key,Object value,JsonConfig jsonConfig) {
        if(null!=value){
            return process(value);
        }else{
            return "";
        }
    }
    private Object process(Object value){
        return dateFormat.format((Date)value);
    }
}

2.转化时 JSONObject.fromObject 加上参数

  Question question = questionService.selectQuestionById(id);
  JsonConfig config=new JsonConfig();
 config.registerJsonValueProcessor(Timestamp.class,new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));
 config.registerJsonValueProcessor(java.util.Date.class,new DateJsonValueProcessor("yyyy-MM-dd"));
  JSONObject json = JSONObject.fromObject(question,config);

这样json里得到的日期格式就是按我们定义的格式显示


对toBean()的处理

json日期格式可以是 2018-02-01 12:23:12 或 2014-08-08
1.编写一个Morpher类继承自AbstractObjectMorpher
class TimeStampMorpher extends AbstractObjectMorpher{ 
     
    private Logger LOG = Logger.getLogger(TimeStampMorpher.class); 
     
    private String[] formats = new String[]{"yyyy-MM-dd hh:mm:ss","yyyy-MM-dd"}; 
    public void setFormats(String[] formats) { 
        this.formats = formats; 
    } 
     
    public TimeStampMorpher() { 
        // TODO Auto-generated constructor stub 
    } 
     
    public TimeStampMorpher(String[] formats) { 
        this.formats = formats; 
    } 
 
    @Override 
    public Object morph(Object dateStr) { 
        // TODO Auto-generated method stub 
        if(null == dateStr){
          return null;
        }
        if(Timestamp.class.isAssignableFrom(dateStr.getClass())){
        	return (Timestamp)dateStr;
        }
        if(!supports(dateStr.getClass())){
          throw new MorphException(dateStr.getClass()+"不是支持的类型!");
        }
        String strValue = (String)dateStr;
        SimpleDateFormat dateParser = null;
        for(int i=0,k=formats.length;i<k;i++){
           if(null == dateParser){
           		dateParser = new SimpleDateFormat(formats[i]);
           }else{
           		dateParser.applyPattern(formats[i]);
           }
           try{
           	  return new Timestamp(dateParser.parse(strValue.toLowerCase()).getTime()));
           }catch(ParseException e){
             e.printStackTrace();
           }
        }
        return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期      
    } 
 
    @Override 
    public Class morphsTo() { 
        // TODO Auto-generated method stub 
        return Timestamp.class; 
    } 
    public boolean supports(Calss claszz){
    		return String.class.isAssignableFrom(claszz);
    }
} 
在toBean的地方
JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher());
Question question = (Question)JSONObject.toBean(questionJson,Question.class);

随便提下 如果Question有分录的话需要这样转
Map<Stirng,Class> classMap = new HashMap<Stirng,Class>();
classmap.put("questionEntry",QuestionEntry.class);
question = (Question)JSONObject.toBean(questionJson,Question.class,calssMap);

其中Question 有属性
private List<QuestionEntry> questionEntry;

猜你在找的Json相关文章