2016-03-21 3 views
0

Я знаю, что есть похожие сообщения об этой проблеме, но, пожалуйста, внимательно прочитайте, прежде чем отмечать их как дубликаты.Не удалось десериализовать объект json для отображения

У меня есть текстовая строка, которую я хочу преобразовать в строку JSON/экземпляр, а затем в переменную карты Java, поэтому я могу получить доступ к каждому атрибуту индивидуально. Это моя строка:

{"S3_r5_Ahf": "0.00025", "S15_r6_Alf": "-0.00514", "S6_r4_Alf": "-0.00126", "S12_r9_Alf": "-0.00595", "S13_r8_Ahf": "0.00018", "S1_r9_Alf": "-0.00385", "S8_r10_Alf": "-0.00849" } 

Использование библиотеки GSON Я преобразованный строку в объект JSON с помощью:

Gson gson = new Gson(); 
String json = gson.toJson(s); 

И это прекрасно работает, а вывод:

"{\"S3_r5_Ahf\": \"0.00025\", \"S15_r6_Alf\": \"-0.00514\", \"S6_r4_Alf\": \"-0.00126\", \"S12_r9_Alf\": \"-0.00595\", \"S13_r8_Ahf\": \"0.00018\", \"S1_r9_Alf\": \"-0.00385\", \"S8_r10_Alf\": \"-0.00849\" 

Проблема заключается в том, когда я пытаюсь преобразовать ее в карту, используя:

Type type = new TypeToken<Map<String, String>>(){}.getType(); 
Map<String, String> retMap = gson.fromJson(json,type); 

Когда я пытаюсь распечатать retMap, я получаю сообщение об ошибке: JsonDeserializer MapTypeAdapter не удалось десериализовать объект json для сопоставления.

Что я делаю неправильно? Спасибо.

+0

Строка, используется первый уже JSON, второй является JSON убежали, так что не десериализовать – Hacketo

ответ

1

Ваша строка Java s уже находится в формате JSON (то есть, строка/экземпляр JSON), поэтому вам не нужно называть gson.toJson() (это превращает его в строку JSON, которая не является JSON карты и, следовательно, не может быть проанализирован как один).

Просто попробуйте:

Type type = new TypeToken<Map<String, String>>(){}.getType(); 
Map<String, String> retMap = gson.fromJson(s,type); 
+0

Потрясающе, спасибо большое, он работал сразу же! –

Смежные вопросы