2013-01-07 120 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); 
    } 

}