我在我的应用程序中使用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'
,但它没有解决这个问题。
我该如何解决?
等一下,你说的“有时”是什么意思? – weston
gson大部分时间都能解析json。有时它不会 –
可能在某些情况下,json有点不同。我正在尝试使用您的建议。 –