我有一個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