java中模型转json对象时,时间属性格式不正确问题的解决
2017-04-05 09:23
567 查看
模型转json对象,在实际编码中的运用应该是很频繁的。
常用的包有Gson、net.sf.json等。
在使用net.sf.json的fromObject()方法时,Date日期格式的属性总会被转成year-mouth-day等可读性很差的格式,而我们想要的格式一般应该是:“yyyy-MM-dd HH:mm:ss”或者long类型,那么应该怎么处理呢?
利用JsonObject和JsonArray的重载方法:
public static JSONArray fromObject(Object object, JsonConfig jsonConfig)
利用这个方法,我们就能指定某类型的数据按照我们想要的格式去处理。
以日期格式为例:
新建一个类MyJsonConfig,继承自JsonConfig类,在类的构造方法中,调用
public void registerJsonValueProcessor(Class propertyType, JsonValueProcessor jsonValueProcessor)
方法来注册一个类型处理器,我们把Date类型处理器的名称定为:
class JsonDateValueProcessor implements JsonValueProcessor
然后我们实现JsonValueProcessor接口的方法:
@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return this.process(o);
}
@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return this.process(o);
}
private Object process(Object value) {
if (value instanceof Date) {
if (type.equals(Long.class)) {
return ((Date)value).getTime();
} else if (type.equals(String.class)) {
SimpleDateFormat sdf = new SimpleDateFormat(this.dateFormat);
return sdf.format(value);
}
}
return value == null ? "" : value.toString();
}
综上,一个完整的MyJsonConfig类的实现如下:
package cn.xxx.tech.utils.JSON;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyJsonConfig extends JsonConfig {
class JsonDateValueProcessor implements JsonValueProcessor {
private final String dateFormat ="yyyy-MM-dd HH:mm:ss";
private Class type;
public JsonDateValueProcessor (Class type) {
this.type = type;
}
public JsonDateValueProcessor() {
this.type = String.class;
}
@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return this.process(o);
}
@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return this.process(o);
}
private Object process(Object value) {
if (value instanceof Date) {
if (type.equals(Long.class)) {
return ((Date)value).getTime();
} else if (type.equals(String.class)) {
SimpleDateFormat sdf = new SimpleDateFormat(this.dateFormat);
return sdf.format(value);
}
}
return value == null ? "" : value.toString();
}
}
public MyJsonConfig(Class type) {
super();
this.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(type));
}
public MyJsonConfig() {
super();
this.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(String.class));
}
}
使用方法:
JSONArray dataJsonArray = JSONArray.fromObject(resultList, new MyJsonConfig());
常用的包有Gson、net.sf.json等。
在使用net.sf.json的fromObject()方法时,Date日期格式的属性总会被转成year-mouth-day等可读性很差的格式,而我们想要的格式一般应该是:“yyyy-MM-dd HH:mm:ss”或者long类型,那么应该怎么处理呢?
利用JsonObject和JsonArray的重载方法:
public static JSONArray fromObject(Object object, JsonConfig jsonConfig)
利用这个方法,我们就能指定某类型的数据按照我们想要的格式去处理。
以日期格式为例:
新建一个类MyJsonConfig,继承自JsonConfig类,在类的构造方法中,调用
public void registerJsonValueProcessor(Class propertyType, JsonValueProcessor jsonValueProcessor)
方法来注册一个类型处理器,我们把Date类型处理器的名称定为:
class JsonDateValueProcessor implements JsonValueProcessor
然后我们实现JsonValueProcessor接口的方法:
@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return this.process(o);
}
@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return this.process(o);
}
private Object process(Object value) {
if (value instanceof Date) {
if (type.equals(Long.class)) {
return ((Date)value).getTime();
} else if (type.equals(String.class)) {
SimpleDateFormat sdf = new SimpleDateFormat(this.dateFormat);
return sdf.format(value);
}
}
return value == null ? "" : value.toString();
}
综上,一个完整的MyJsonConfig类的实现如下:
package cn.xxx.tech.utils.JSON;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyJsonConfig extends JsonConfig {
class JsonDateValueProcessor implements JsonValueProcessor {
private final String dateFormat ="yyyy-MM-dd HH:mm:ss";
private Class type;
public JsonDateValueProcessor (Class type) {
this.type = type;
}
public JsonDateValueProcessor() {
this.type = String.class;
}
@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return this.process(o);
}
@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return this.process(o);
}
private Object process(Object value) {
if (value instanceof Date) {
if (type.equals(Long.class)) {
return ((Date)value).getTime();
} else if (type.equals(String.class)) {
SimpleDateFormat sdf = new SimpleDateFormat(this.dateFormat);
return sdf.format(value);
}
}
return value == null ? "" : value.toString();
}
}
public MyJsonConfig(Class type) {
super();
this.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(type));
}
public MyJsonConfig() {
super();
this.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(String.class));
}
}
使用方法:
JSONArray dataJsonArray = JSONArray.fromObject(resultList, new MyJsonConfig());
相关文章推荐
- var dataObj=eval("("+data+")");//转换为json对象(解决在ajax返回json格式数据的时候明明正确的获取了返回值但是却就是进不去success方法的问题。格式错误)
- JAVA对象通过jackson转成json格式,属性名首字母变成小写的解决方法
- 解决SpringMVC 返回Java8 时间JSON数据的格式化问题处理
- SpringMVC(28):json数据的时间日期格式问题-解决与示例
- JSON格式正确,无法解析问题解决方法
- JSON通过配置文件格式化时间属性(解决[object Object]问题)
- 解决fasterxml中string字符串转对象json格式错误问题
- 关于数据序列化(5),定制FastJSON序列化(解决Java大Long类型js的Number接收丢失数据的问题,不序列化某些属性)
- json格式的字符串转为json对象遇到特殊字符问题解决
- ajax打印对象时,转换由java对象转为Json格式的String时遇到的Hibernate问题
- SpringMVC 中List 对象转换成Json格式 List对象中属性为NUll解决
- 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
- WEBGL之将3D模型转成json格式步骤(附待解决问题)
- js获取json对象中正确的时间格式
- json格式的时间显示Date问题解决方法
- Atiitt 对象转换json 序列化规范 Java 循环引用的解决 设置序列化层次深度 去除不必的属性 太长不方便月度 jsonObject.remove("num1"); Prety fo
- 对象中含有java.util.Date时使用JSONArray.fromObject时时间显示问题
- json转换为java对象多传属性问题
- 关于json格式对象返回页面时间字段显示NANA的问题
- 解决对象与JSON解析时属性不对应+空字符串+枚举的问题