2016-12-31 43 views
-1

我在我的應用程序中使用gson 2.4來解析json對象。該應用程序的流程是:從服務器獲取登錄json - 將其保存爲共享首選項 - 獲取當我需要和解析回json對象。有時不能從json使用gson解析日期

有問題的JSON,我從服務器得到了

例子:

{".expires":"Mar 16, 2017 5:52:29 PM",".issued":"Dec 16, 2016 5:52:29 PM","access_token":"**"} 

,當我從共享偏好得到JSON回我的代碼:

SharedPreferences settings = activity.getSharedPreferences("UserInfo", 0);   
String json = settings.getString("LoginToken", null); 
Gson gson = new GsonBuilder().setDateFormat(Settings.DateFormat).create(); 
loginToken = gson.fromJson(json, LoginToken.class); 

就當我是最後一行使用gson.fromJson我收到一個異常。

所以我嘗試使用此代碼在我的日食解析此JSON:

String raw = "{\".expires\":\"Mar 16, 2017 5:52:29 PM\",\".issued\":\"Dec 16, 2016 5:52:29 PM\",\"access_token\":\"**"}"; 
Gson gson = new GsonBuilder().setDateFormat(Settings.DateFormat).create(); 
LoginToken loginToken = gson.fromJson(raw, LoginToken.class); 

,併產生此異常:

Exception in thread "main" com.google.gson.JsonSyntaxException: Mar 16, 2017 5:52:29 PM 
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:107) 
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:82) 
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:35) 
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:117) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217) 
at com.google.gson.Gson.fromJson(Gson.java:814) 
at com.google.gson.Gson.fromJson(Gson.java:779) 
at com.google.gson.Gson.fromJson(Gson.java:728) 
at com.google.gson.Gson.fromJson(Gson.java:700) 
at **.Main.main(Main.java:33) 
Caused by: java.text.ParseException: Unparseable date: "Mar 16, 2017 5:52:29 PM" 
    at java.text.DateFormat.parse(Unknown Source) 
    at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:105) 

我使用的日期格式爲:

DateFormat = "dd/MM/yyyy'T'HH:mm:ss"; 

也試圖用空格替換'T',但它沒有解決這個問題。

我該如何解決?

+0

等一下,你說的「有時」是什麼意思? – weston

+0

gson大部分時間都能解析json。有時它不會 –

+0

可能在某些情況下,json有點不同。我正在嘗試使用您的建議。 –

回答

2

您需要在數據匹配的日期格式,你的問題是指我必須您的日期格式的情況下使

"MMM dd, yyyy hh:mm:ss a"; 
+0

現在這個JSON不工作:'{「.expires」:「31/03/2017 16:45:07」,「。issued」:「31/12/2016 15:45:06」,「access_token」 :「**」}' –

+0

這不會。你需要每次使用正確的格式!沒有一種格式可以適用於所有人。 – weston