2013-02-10 69 views
20

我必須將Json對象與具有Date的Java對象綁定。在我的Json的日期格式如下:Gson - 無法解析的日期

2013-01-04T10:50:26 + 0000

而且我使用的GsonBulder如下:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create(); 

但是我得到以下情況除外:

The RuntimeException could not be mapped to a response, re-throwing to the HTTP container 
com.google.gson.JsonSyntaxException: 2013-01-04T10:50:26+0000 
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:81) 
..... 
Caused by: java.text.ParseException: Unparseable date: "2013-01-04T10:50:26+0000" 
at java.text.DateFormat.parse(DateFormat.java:337) 
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79) 

我試圖加載具有GSON這個請求:

https://graph.facebook.com/me?fields=id,username,email,link,updated_time&access_token=accessToken 

和響應是

{"id":"12345","username":"myusername","email":"myemail\u0040yahoo.it","link":"http:\/\/www.facebook.com\/mysusername","updated_time":"2013-01-04T10:50:26+0000"} 
+0

哪裏的時間字符串('2013-01-04T10:50:26 + 0000')從何而來? – scones 2013-02-10 09:11:04

+0

我更新了這個問題,請看看它。 – ddelizia 2013-02-10 12:10:29

回答

39

反序列化失敗,因爲JSON字符串中的引號失蹤。

以下工作:

Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create(); 

    String date = "\"2013-02-10T13:45:30+0100\""; 
    Date test = gson.fromJson(date, Date.class); 
    System.out.println("date:" + test); 

輸出:

日期:孫2月10日13點45分30秒CET 2013

HTH

編輯完整的例子:

import java.util.Date; 
import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 


public class FacebookResponse { 

int id; 
String username; 
String email; 
String link; 
Date updated_time; 

@Override 
public String toString() { 
    return "ID: " + id + " username: " + username + " email: " + email + " link: " + link + " updated_time: " + updated_time; 
}; 



/** 
* @param args 
*/ 
public static void main(String[] args) {   
    String json = "{\"id\":\"12345\",\"username\":\"myusername\",\"email\":\"myemail\u0040yahoo.it\",\"link\":\"http://www.facebook.com/mysusername\",\"updated_time\":\"2013-01-04T10:50:26+0000\"}"; 
    Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").create(); 

    FacebookResponse response = gson.fromJson(json, FacebookResponse.class); 
    System.out.println(response); 
} 

}

+0

感謝多米尼克,最後我的代碼正在工作,但我正在測試一個糟糕的形成json的代碼。感謝您的反饋 – ddelizia 2013-02-10 19:29:11

+2

有沒有辦法告訴setDateFormat方法添加缺少的引號,還是我必須爲此編寫自定義DateAdapter? – 2015-01-27 22:38:03