1.java对象(含Date类型字段)转JSON
需要使用JSONConfig对象,对传入的数据,进行处理:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONObject jsonObject = JSONObject.fromObject(case1,jsonConfig);
JsonDateValueProcessor实现了JsonValueProcessor接口:
package com.zz;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
public class JsonDateValueProcessor implements JsonValueProcessor{
private String datePattern = "yyyy-MM-dd HH:mm:ss";//默认样式,可以在构造方法中修改
public JsonDateValueProcessor() {
super();
}
public JsonDateValueProcessor(String datePattern) {
super();
this.datePattern = datePattern;
}
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
try {
if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
Date date = (Date)value;
return sdf.format(date);
}
return value == null ? null : value.toString();
} catch (Exception e) {
return null;
}
}
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
return processArrayValue(value, jsonConfig);
}
public String getDatePattern() {
return datePattern;
}
public void setDatePattern(String datePattern) {
this.datePattern = datePattern;
}
}
将main方法按照上述修改:
public static void main(String[] args) {
Case case1 = new Case();
case1.setCaseName("案件");
case1.setCreateDate(new Date());
case1.setAppDate(new Date());
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
JSONObject jsonObject = JSONObject.fromObject(case1,jsonConfig);
String json = jsonObject.toString();
System.out.println(json);
}
执行结果如下:
{“appDate”:“2018-09-06 15:03:48”,“caseId”:0,“caseName”:“案件”,“createDate”:“2018-09-06 15:03:48”}
2.JSON转java对象(含Date类型字段)
将JSON字符串,转换成Case对象,如果直接使用:
String json="{“appDate”:“2018-09-06 15:03:48”,“caseId”:0,“caseName”:“案件”,“createDate”:“2018-09-06 15:03:48”}";
JSONObject obj = new JSONObject().fromObject(json);
Case case1=(Case)JSONObject.toBean(obj ,Case.class);
执行的结果为:
这里转换成Case对象中的时间是当前计算机的时间,不是传入的Json串中的时间,这就需要进行下面的操作了。转成对象之前,添加下面两行代码:
String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss"};
//日期转化格式
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
执行结果:
对象中的日期,就是json字符串中的日期,成功。