2013-02-10 10 views
20

Ich muss ein Json-Objekt mit einem Java-Objekt binden, das ein Date hat. Das Datumsformat auf meine Json ist folgende:Gson - Nicht übertragbares Datum

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

Und ich bin mit dem GsonBulder wie folgt:

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

aber ich bin immer die folgende Ausnahme:

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) 

ich versuche, diese Anforderung mit Gson zu laden:

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

Und die Antwort ist

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

Wo kommt die Zeit string ('2013-01-04T10: 50: 26 + 0000') kommen aus? – scones

+0

Ich habe die Frage aktualisiert, bitte sehen Sie sie sich an. – ddelizia

Antwort

39

Die Deserialisierung fehlschlägt, weil die Zitate im JSON-String fehlen.

Die folgenden Werke:

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); 

Ausgang:

: So 10. Februar 13.45.30 CET 2013

HTH

bearbeiten Vollständiges Beispiel :

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

Dank Dominik, am Ende funktionierte mein Code, aber ich testete den Code mit einem schlecht geformten json. Danke für die Rückmeldung – ddelizia

+2

Gibt es eine Möglichkeit, die SetDateFormat-Methode, um die fehlenden Anführungszeichen hinzufügen, oder würde ich einen benutzerdefinierten DateAdapter dafür schreiben? –