Я использую 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);
На последней строке, когда я нахожусь using 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 немного отличается. Я пытаюсь использовать ваше предложение прямо сейчас. –