2016-12-31 11 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); 

На последней строке, когда я нахожусь 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' пробелом, но это не исправило.

Как я могу это исправить?

+0

Держись, что вы подразумеваете под «иногда» ? – weston

+0

В большинстве случаев gson умеет разбирать json. иногда это не –

+0

, вероятно, в некоторых случаях json немного отличается. Я пытаюсь использовать ваше предложение прямо сейчас. –

ответ

2

Вы должны соответствовать формату даты в данных, так в тех случаях, ваш вопрос относится к ваш формат даты, я должен быть:

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

Теперь этот json не работает: '{" .expires ":" 31/03/2017 16:45:07 "," .ed ":" 31/12/2016 15:45:06 "," access_token " : "**"} ' –

+0

Это не так. Вы должны использовать правильный формат каждый раз! Нет ни одного формата, который будет работать для всех. – weston