JSON格式化日期方法

首先我使用的工具是json-lib

地址http://json-lib.sourceforge.net/

 

也可参考我的http://lyking2001.iteye.com/admin/blogs/504020了解json-lib

 

对于date类型的转化一直是json中比较复杂的事情,我这只提出一种自己会的方式与大家分享,如果还好更好的方式别忘记告诉我学习下嘿嘿在这先谢了

 

对于date类型直接转化如下

 

java.util.Date testDate = new Date();   
JSONObject jsonFromDate = JSONObject.fromObject(testDate);   
System.out.println(jsonFromDate);   
//prints {"date":26,"day":1,"hours":11,"minutes":30,"month":9,"seconds":18,"time":1256527818296,"timezoneOffset":-480,"year":109} 

 

上述转化后的格式明显不利于我们使用,下面介绍我的方法

 

//注册date类型的转化方式   
 JsonConfig jsonConfig = new JsonConfig();   
 jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonValueProcessorImplTest());   
    
JSONObject jsonFromBean = JSONObject.fromObject(testBean,jsonConfig);   
System.out.println(jsonFromBean);   
  
//prints {"birthday":"2009-10-26","id":"id","name":"name"}   
  
String[] dateFormats = new String[] {"yyyy/MM/dd","yyyy-MM-dd"};    
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));    
TestBean jsonToBean = (TestBean)JSONObject.toBean(jsonFromBean,TestBean.class);   
System.out.println(jsonToBean);   
//prints TestBean@1126b07[id=id,name=name,birthday=Mon Oct 26 00:00:00 CST 2009] 

 

其中需要的类如下:

 

1.准备测试数据

 

import java.util.Date;   
  
import org.apache.commons.lang.builder.ReflectionToStringBuilder;   
  
public class TestBean {   
  
    private String id;   
    private String name;   
    private java.util.Date birthday;   
  
    public TestBean() {   
        super();   
    }   
  
    public TestBean(String id, String name, Date birthday) {   
        super();   
        this.id = id;   
        this.name = name;   
        this.birthday = birthday;   
    }   
  
    public String getId() {   
       return id;   
    }   
  
    public void setId(String id) {   
        this.id = id;   
    }   
  
    public String getName() {   
        return name;   
    }   
  
    public void setName(String name) {   
        this.name = name;   
    }   
  
    public java.util.Date getBirthday() {   
        return birthday;   
    }   
  
    public void setBirthday(java.util.Date birthday) {   
        this.birthday = birthday;   
    }   
  
    public String toString() {   
        return ReflectionToStringBuilder.toString(this);   
    }   
  
}  

 

2.创建date格式化类

 

import java.text.SimpleDateFormat;   
import java.util.Date;   
  
import net.sf.json.JsonConfig;   
import net.sf.json.processors.JsonValueProcessor;   
  
public class JsonValueProcessorImplTest implements JsonValueProcessor {   
    private String format = "yyyy-MM-dd";   
  
       
    public JsonValueProcessorImplTest() {   
        super();   
    }   
  
    public JsonValueProcessorImplTest(String format) {   
        super();   
        this.format = format;   
    }   
  
    @Override  
    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;   
    }   
  
    @Override  
    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {   
        if (value instanceof java.util.Date) {   
            String str = new SimpleDateFormat(format).format((Date) value);   
            return str;   
        }   
        return value.toString();   
    }   
  
    public String getFormat() {   
        return format;   
    }   
  
    public void setFormat(String format) {   
        this.format = format;   
    }   
  
} 

 

通过如上方式我们就可以把含date类型的javabean在javabean和json格式中相互转化了

 

 

 

 

 

你可能感兴趣的:(json)