最近在做一个Android项目,服务端是用.Net写的,通过.Net MVC的JsonResult类型生成的JSON字符串中,如果数据包含日期格式的字段,则会生成形为"S_Date":"\/Date(1370707200000)\/"的字符串;这种格式是无法通过FastJSON解析的,默认情况下,FastJSON将Date类型序列化为long,这样使得在序列化和反序列化日期格式数据的过程不会导致时区问题。所以,必须将/Date(1370707200000)/中的long型日期数据提取出来,才能被FastJSON转换;
在网上没有找到很好的方法来进行简单转换,我的思路是采用JAVA正则表达式的方法,先提取出/Date(1370707200000)/,然后再提取出其中的数字,将原JSON字符串中的日期替换为提取出的数字,即可;
String resData = responseData; try { Pattern p = Pattern.compile("Date\\(\\d{13}\\)"); Matcher m = p.matcher(responseData); while (m.find()) { Pattern p1 = Pattern.compile("\\d{13}"); Matcher m1 = p1.matcher(m.group()); // Log.e("M", m.group()); while (m1.find()) { // Log.e("M1", m1.group()); resData = resData.replace("\\/" + m.group() + "\\/", m1.group()); } // Log.e("R", resData); } } catch (Exception e) { e.printStackTrace(); } adTexts = JSON.parseArray(resData, TextInfo.class);