2013-02-10 23 views
20

Tôi phải liên kết đối tượng Json với đối tượng java có Ngày tháng. Định dạng ngày trên Json của tôi là như sau:Gson - Ngày không thể đọc được

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

Và Tôi đang sử dụng GsonBulder như sau:

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

nhưng Im nhận được ngoại lệ sau đây:

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) 

tôi đang cố gắng để tải yêu cầu này với Gson:

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

Và câu trả lời là

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

đâu chuỗi thời gian ('2013-01-04T10: 50: 26 + 0000') đến từ đâu? – scones

+0

Tôi đã cập nhật câu hỏi, vui lòng xem câu hỏi. – ddelizia

Trả lời

39

Các Deserialization thất bại, vì có dấu ngoặc kép trong chuỗi json đang thiếu.

Các công trình sau đây:

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

Output:

ngày: Sun 10 tháng 2 13:45:30 CET 2013

HTH

Sửa Complete Ví dụ :

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

Cảm ơn Dominik, vào cuối mã của tôi đã làm việc nhưng tôi đã thử nghiệm mã với một json xấu hình thành. Cảm ơn các thông tin phản hồi – ddelizia

+2

Có cách nào để nói cho các phương pháp setDateFormat để thêm các dấu ngoặc kép, hoặc tôi sẽ phải viết một DateAdapter tùy chỉnh cho điều đó? –

Các vấn đề liên quan