2013-02-10 14 views
20

Muszę powiązać obiekt Json z obiektem Javy, który ma datę. Format daty w moim JSON jest następujący:Gson - Data niedostępna

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

I używam GsonBulder następująco:

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

ale Im uzyskiwanie następujący wyjątek:

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) 

Próbuję załadować tę prośbę z Gson:

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

A odpowiedź jest

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

Skąd ciąg czasu ('2013-01-04T10: 50: 26 + 0000') pochodzi? – scones

+0

Zaktualizowałem pytanie, proszę spojrzeć na to. – ddelizia

Odpowiedz

39

Deserializacji nie powiedzie się, ponieważ cytaty obrębie ciągów json brakuje.

następujące utwory:

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

wyjściowa:

data: Sun 10 lutego 13:45:30 CET 2013

HTH

Edit kompletny przykład :

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

Dzięki Dominik, na końcu mój kod działał, ale testowałem kod ze źle sformowanym jsonem. Dzięki za opinię – ddelizia

+2

Czy istnieje sposób, aby powiedzieć metoda setDateFormat, aby dodać brakujące cytaty, czy musiałbym napisać niestandardowy DateAdapter dla tego? –