2013-02-10 25 views
20

मुझे एक जावा ऑब्जेक्ट के साथ एक जेसन ऑब्जेक्ट को बांधना है जिसमें एक तिथि है।जीसन - अतुलनीय तिथि

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

और मैं इस प्रकार GsonBulder उपयोग कर रहा हूँ: मेरे Json पर दिनांक स्वरूप निम्नलिखित है

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

लेकिन मैं हो रही निम्न अपवाद:

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

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 साथ इस अनुरोध को लोड करने के लिए कोशिश कर रहा हूँ

और प्रतिक्रिया,

{"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

+0

मैंने सवाल अपडेट किया है, कृपया इसे देखें। – ddelizia

उत्तर

39

Deserialization विफल रहता है, क्योंकि 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); 

आउटपुट:

तारीख: सूर्य फ़र, 10 13:45:30 सीईटी 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

धन्यवाद डोमिनिक, अंत में मेरा कोड काम कर रहा था लेकिन मैं खराब गठित जेसन के साथ कोड का परीक्षण कर रहा था। फीडबैक के लिए धन्यवाद – ddelizia

+2

क्या लापता उद्धरण जोड़ने के लिए setDateFormat विधि को बताने का कोई तरीका है, या क्या मुझे इसके लिए एक कस्टम डेट एडाप्टर लिखना होगा? –