fastJson 对Timestamp 序列化和反序列化问题

浮生若梦E 发布于 2017/08/21 10:44
阅读 1K+
收藏 2

fastJson 对Timestamp 序列化和反序列化问题

Object[] objects = new Object[]{new Timestamp(System.currentTimeMillis())};

如上  objects 数组里 有Timestamp类型对象,使用 JSON toString 后 默认是时间戳数字。

可以通过 SerializerFeature 进行序列号处理。 

反序列话的时候 不知道 怎么处理 才能返回new Object[]{new Timestamp(System.currentTimeMillis())};

 

Object[] objects = new Object[]{new Timestamp(System.currentTimeMillis())};
String result = JSON.toJSONString(objects, SerializerFeature.UseISO8601DateFormat);
Object[] objects1 = JSON.parseObject(result, Object[].class);
JSON.parseObject(result, Object[].class, Feature.AllowISO8601DateFormat);
Timestamp timestamp = (Timestamp) objects1[0];
System.err.println(timestamp.getTime());

java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Timestamp

 

 

加载中
0
依然菜刀
依然菜刀

效率降低很多?不能还原回去?

public class JSON转换 {

	public static void main(String[] args) throws Exception {
		Object[] objects = new Object[]{new Timestamp(System.currentTimeMillis())};
		String s = toJSONString(objects);
		Object[] newObjects = parseObjects(s);
		System.out.println(((Timestamp)newObjects[0]).getTime());
	}
	
	static String toJSONString(Object[] objects) {
		StringBuilder builder = new StringBuilder();
		String arrayClassName = "[L" + objects[0].getClass().getName() + ";";
		builder.append(arrayClassName).append("\n");
		builder.append(JSON.toJSONString(objects));
		return builder.toString();
	}
	
	static Object[] parseObjects(String s) throws Exception {
		BufferedReader reader = new BufferedReader(new StringReader(s));
		String className = reader.readLine();
		Class<?> clazz = Class.forName(className);
		return (Object[]) JSON.parseObject(s.substring(className.length() + 1), clazz);
	}
	
}

 

0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

也就是说数字变字符串了?

0
KrizeChan
KrizeChan
Timestamp timestamp = new Timestamp(Long.valueOf(objects1[0]));

这样呢?

浮生若梦E
浮生若梦E
不想 手动处理,让 json自动完成序列号,或自己编写序列号接口
0
xtaetg2
xtaetg2
Timestamp[] objects = new Timestamp[]{new Timestamp(System.currentTimeMillis())};
试试看
浮生若梦E
浮生若梦E
不想 手动处理,让 json自动完成序列号,或自己编写序列号接口.
0
依然菜刀
依然菜刀

JSON.parseObject(result, Timestamp[].class);

浮生若梦E
浮生若梦E
回复 @依然菜刀 : 这样效率上会降低不少吧,貌似也没有办法 把object[] 还原回去了 ,我想的是可能自定义序列号接口可以,但不知道咋做
依然菜刀
依然菜刀
回复 @浮生若梦e : 那你存储传输的时候,多加一个字段,存储Object[]里面存储的具体类型,这样要反序列化的时候,不就行了么
浮生若梦E
浮生若梦E
这个 object[] 里可能会有 好多种类型的数据 比如 String int date
返回顶部
顶部