2013-01-07 116 views
2

我的JSON輸入的樣子:GSON:無法解析日期

{ user: "sample-user", date : 1225864800 } 

而且我DateDeserializer類:

private class DateDeserializer implements JsonDeserializer<Date> 
{ 
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
     throws JsonParseException 
    { 
     System.out.println("Deserializer..."); 
     return new Date(json.getAsJsonPrimitive().getAsLong()); 
    } 
} 

GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer()); 
gson.fromJson(new FileReader("input.json"), MyType.class); 

即使設置了一切之後,我越來越

java.text.ParseException: Unparseable Date: "1225864800" 

我在這裏做錯了什麼?請幫忙。

+1

這是劃時代的時間戳。 [鏈接](http://en.wikipedia.org/wiki/Epoch_(reference_date)) – Kevindra

+0

可能會有所幫助 - http://stackoverflow.com/questions/5489083/how-can-i-make-jackson-反序列化一個最新的對象 –

+2

請張貼您的實際代碼,實際的JSON和實際的堆棧跟蹤。你在這裏的代碼不應該拋出這個異常,你顯示的JSON不是有效的JSON。 –

回答

0

您試圖將整個Json結構反序列化爲日期,而不僅僅是日期字段。你需要這樣的:

User user = jsonElement.getAsJsonObject().get("user").getAsString(); 
    Date date = new Date(jsonElement.getAsJsonObject().get("date").getAsLong()); 
0

你可以寫一個適配器爲整個MyType類,這樣就可以保持對其他地方的標準日期的反序列化(如果有的話),並限制只有內部MyType您的具體反序列化。

更好地說明我的意思,這裏的代碼,你可以複製粘貼& &運行:

package stackoverflow.questions.q14197557; 

import java.lang.reflect.Type; 
import java.util.Date; 

import com.google.gson.*; 

public class Q14197557 { 

    public static class MyType { 

     String user; 
     Date date; 
     @Override 
     public String toString() { 
      return "MySample [user=" + user + ", date=" + date + "]"; 
     } 

    } 

    public static class MySampleDeserializer implements JsonDeserializer<MyType> { 
     public MyType deserialize(JsonElement json, Type typeOfT, 
       JsonDeserializationContext context) throws JsonParseException { 

      if (json == null) 
       return null; 
      else { 
       MyType s = new MyType(); 
       s.user = json.getAsJsonObject().get("user").getAsString(); 
       s.date = new Date(json.getAsJsonObject().get("date").getAsLong()); 
       return s; 

      } 

     } 
    } 

    public static void main(String[] args) { 

     String json = "{ user: \"sample-user\", date : 1225864800 }"; 
     GsonBuilder gsonBuilder = new GsonBuilder(); 
     gsonBuilder.registerTypeAdapter(MyType.class, new MySampleDeserializer()); 
     MyType s = gsonBuilder.create().fromJson(json, MyType.class); 

     System.out.println("My Type: " + s); 
    } 

}