java list转JSONObject报错

最近的项目需要将list转json返回到页面显示,遇到问题:

net.sf.json.JSONException: java.lang.reflect.InvocationTargetException at net.sf.json.JSONObject._fromBean(JSONObject.java:738) at net.sf.json.JSONObject.fromObject(JSONObject.java:182) at net.sf.json.JSONObject._processValue(JSONObject.java:2426) at net.sf.json.JSONObject._setInternal(JSONObject.java:2447) at net.sf.json.JSONObject.setValue(JSONObject.java:1189) at net.sf.json.JSONObject._fromBean(JSONObject.java:725) at net.sf.json.JSONObject.fromObject(JSONObject.java:182) at net.sf.json.JSONArray._processValue(JSONArray.java:2294) at net.sf.json.JSONArray.processValue(JSONArray.java:2325) at net.sf.json.JSONArray.addValue(JSONArray.java:2312) at net.sf.json.JSONArray._fromCollection(JSONArray.java:841) at net.sf.json.JSONArray.fromObject(JSONArray.java:137) at net.sf.json.JSONArray.fromObject(JSONArray.java:120)
谷歌了一下,据说是因为list中的数据有java.sql.date类型,而json的转换需要java.util.date。所以转换会报错。如果 list中数据有java.sql.time也会有同样的错。废话不多说,说下怎么解决。JSON jar包提供了扩展JSON转换处理类的方法。扩展类需要实现JsonValueProcessor,代码如下

import java.sql.Time;
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 JsonDateValueProcessor implements JsonValueProcessor {

private String format ="yyyy-MM-dd hh:mm:ss";
private String format2 ="hh:mm:ss";
public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}

public Object processObjectValue(String key, Object value, JsonConfig config) {
return process(value);
}

private Object process(Object value){

if(value instanceof Date){
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.UK);
return sdf.format(value);
}

if(value instanceof Time){
SimpleDateFormat sdf = new SimpleDateFormat(format2,Locale.UK);
return sdf.format(value);
}
return value == null ? "" : value.toString();

}
}

转换JSON的时候如下:

JSONObject jsonArray = new JSONObject();
JsonConfig jsonConfig = new JsonConfig();

jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor());
jsonConfig.registerJsonValueProcessor(java.sql.Time.class, new JsonDateValueProcessor());
JSONArray jsonObj = JSONArray.fromObject(userlist, jsonConfig);

 





你可能感兴趣的:(JSONObject)