Java 有时无法使用gson从json解析日期

Java 有时无法使用gson从json解析日期,java,android,json,gson,Java,Android,Json,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.

我在应用程序中使用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";

等等,你说有时候是什么意思?大多数时候gson都能解析json。有时候,在某些情况下,json可能有点不同。我现在正在尝试使用你的建议。现在这个json不起作用:`{.expires:31/03/2017 16:45:07,.issued:31/12/2016 15:45:06,access_token:*}它不会。每次都需要使用正确的格式!没有一种格式可以适用于所有人。