2013-02-10 7 views
20

Devo associare un oggetto Json a un oggetto java con una data. Il formato della data sul mio JSON è la seguente:Gson - Data non separabile

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

e sto usando il GsonBulder come segue:

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

ma Im ottenendo il seguente eccezione:

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) 

sto cercando di caricare questa richiesta con GSON:

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

E la risposta è

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

Da dove viene la stringa tempo ('2013-01-04T10: 50: 26 + 0000') provengono da? – scones

+0

Ho aggiornato la domanda, per favore dai un'occhiata. – ddelizia

risposta

39

La deserializzazione non riesce, perché le virgolette all'interno della stringa JSON sono mancanti.

le seguenti opere:

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

uscita:

Data: Dom 10 Feb 13:45:30 CET 2013

HTH

Modifica esempio completo :

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

Grazie a Dominik, alla fine il mio codice funzionava, ma stavo testando il codice con un jSON mal formato. Grazie per il feedback – ddelizia

+2

C'è un modo per dire al metodo setDateFormat di aggiungere le virgolette mancanti, o dovrei scrivere un DateAdapter personalizzato per quello? –