簡體   English   中英

有時無法使用gson從json解析日期

[英]Sometimes can't parse date from json using gson

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

我從服務器獲取的有問題的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的最后一行時,我遇到了異常。

所以我嘗試使用以下代碼在eclipse中解析此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' ,但沒有解決該問題。

我該如何解決?

您需要匹配數據中的日期格式,因此在這些情況下,您的問題是指您的日期格式,我需要是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM