我有一个JSON响应,其中包含一个时间戳,但我有一些问题解析它的日期对象。我也有同样的难题序列化为相同的格式。我使用Gson来解码对象的JSON响应,这是我有一个hicup的唯一现货。Java/JSON日期时间字段
"TimeStamp":"\/Date(1327650052632+0000)\/"
我确实看了一下自定义的序列化/反序列化适配器,但是无法制作头部或尾部。
问候, EZFrag
我有一个JSON响应,其中包含一个时间戳,但我有一些问题解析它的日期对象。我也有同样的难题序列化为相同的格式。我使用Gson来解码对象的JSON响应,这是我有一个hicup的唯一现货。Java/JSON日期时间字段
"TimeStamp":"\/Date(1327650052632+0000)\/"
我确实看了一下自定义的序列化/反序列化适配器,但是无法制作头部或尾部。
问候, EZFrag
我设法了解适配器(有点)。下面是我使用的代码:
private Gson createGson(){
JsonSerializer<Date> ser = new JsonSerializer<Date>() {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext
context) {
return src == null ? null : new JsonPrimitive("\\/Date("+src.getTime()+"+0000)\\/");
}
};
JsonDeserializer<Date> deser = new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
String tmpDate = json.getAsString();
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(tmpDate);
boolean found = false;
while (matcher.find() && !found) {
found = true;
tmpDate = matcher.group();
}
return json == null ? null : new Date(Long.parseLong(tmpDate));
}
};
return new GsonBuilder().serializeNulls()
.registerTypeAdapter(Date.class, ser)
.registerTypeAdapter(Date.class, deser).create();
}
jQuery有此方法。
formatJSONDate(日期(result.dateFromJSON))
或者,你可以尝试这个正则表达式。
function parseJsonDate(jsonDate) {
var offset = new Date().getTimezoneOffset() * 60000;
var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
if (parts[2] == undefined)
parts[2] = 0;
if (parts[3] == undefined)
parts[3] = 0;
return new Date(+parts[1] + offset + parts[2]*3600000 + parts[3]*60000);
};
附: +1和UpVote,如果你喜欢这个评论... – 2012-01-27 09:46:15
哈哈!评论还是回答? – 2012-01-27 11:09:10
这似乎与http://stackoverflow.com/questions/4322541/how-to-convert-a-date-between-jackson-and-gson – stacker 2012-01-27 09:44:18