2016-03-21 12 views
0

Ich weiß, dass es zu diesem Problem ähnliche Artikel gibt, lesen Sie diese jedoch sorgfältig, bevor Sie sie als Duplikat markieren.Fehler beim Deserialisieren des JSON-Objekts zur Karte

Ich habe eine Textzeichenfolge, die ich in eine JSON-Zeile/Instanz und dann in eine Java-Map-Variable konvertieren möchte, so dass ich auf jedes Attribut einzeln zugreifen kann. Das ist mein string:

{"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" } 

die Gson Bibliothek verwenden ich die Zeichenfolge in ein Json-Objekt umgewandelt:

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

Und das funktioniert gut, die Ausgabe Wesen:

"{\"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\" 

Das Problem ist, wenn ich versuche, es in eine Karte zu konvertieren, indem ich verwende:

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

Wenn ich versuche, RetMap zu drucken, erhalte ich den Fehler: Der JsonDeserializer MapTypeAdapter konnte das zu kopierende Json-Objekt nicht deserialisieren.

Was mache ich falsch? Danke.

+0

Die Zeichenfolge, die Sie zum ersten Mal verwendet ist bereits JSON, das zweite ist ein JSON entkam es – Hacketo

Antwort

1

Ihre Java-Zeichenkette s ist bereits im JSON-Format (dh eine "JSON-Zeile/Instanz"), Sie müssen also gson.toJson() nicht aufrufen (dies verwandelt sie in eine JSON-Zeichenkette, die keine JSON-Zeichenkette ist) Karte, und kann daher nicht als einer geparst werden).

Versuchen Sie einfach:

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

Fantastische deserialisiert werden so ausfallen, vielen Dank, es funktionierte sofort! –

Verwandte Themen