在项目中我发现在后台用的JsonArray中(在前台以json形式在jsp中获得后台传来的数据),如果有字段类型是Date或者Float,还有一些其它类型,传到前台显示的时候,date类型会显示成[Object Object],float类型的精度会变得不一样,这就要我们在后台对这些类型做一些处理了。下面我提供了2种处理的方式仅供参考。
第一种方式:写一个工具类:
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";
@Override
public Object processArrayValue(Object value, JsonConfig config) {
return process(value);
}
@Override
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);
}
return value == null ? "" : value.toString();
}
}
然后将JSONArray转换:
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class , new JsonDateValueProcessor());
JSONArray ja = JSONArray.fromObject(newsList,jsonConfig);
第二种方式:
将要传到前台的List中的每一个对象全部转化为JSONObject类型:
JSONArray ja = new JSONArray();
for(int i = 0;i<newsList.size();i++){
JSONObject jo = new JSONObject();
jo.put(“newsName”,newsList.get(i).getNewsName() );
..........
DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm");
String s = df.format(newsList.get(i).getNewsTime());
jo.put("newsTime",s);
ja.add(jo);
}
result = ja.toString();
最后将result传到前台。
Float类型也是同理。