Deserializing MapObject, Object mit GSon

8

Ich habe eine Karte mit einer Mischung von Typen wie in diesem einfachen Beispiel

%Vor%

Was ich zurückbekomme sind einfache Object s, keine Integer s, keine String s. Die Ausgabe sieht wie

aus %Vor%

Kann ich es irgendwie reparieren? Ich würde erwarten, dass solche einfachen Fälle standardmäßig korrekt behandelt werden.

Ich weiß, dass die Information über den Typ nicht immer erhalten werden kann und möglicherweise 1 und "1" bedeutet genau dasselbe in JSON. Die Rückgabe einfacher, inhaltsloser Objekte ergibt jedoch keinen Sinn für mich.

Update: Die serialisierte Version (d. h. das string oben) sieht gut aus:

%Vor%     
maaartinus 22.03.2011, 19:14
quelle

5 Antworten

6

Gson ist nicht so schlau. Liefern Sie stattdessen eine klare und statische Datenstruktur im Geschmack einer Javabean-Klasse, damit Gson versteht, um welchen Typ die separaten Eigenschaften deserialisiert werden sollen.

z. B.

%Vor%

in Kombination mit

%Vor%

Update : Laut den Kommentaren scheint der Keyset nicht repariert zu sein (obwohl Sie in der Lage sind, ihn manuell zu konvertieren, ohne vorher die Struktur zu kennen). Sie könnten einen benutzerdefinierten Deserializer erstellen. Hier ist ein schnelles Beispiel.

%Vor%

die Sie wie folgt verwenden:

%Vor%     
BalusC 22.03.2011, 20:47
quelle
4
%Vor%     
Michael Lancaster 19.05.2011 07:20
quelle
4

Aktualisieren Sie auf Gson 2.1 . Es druckt dies:

%Vor%     
Jesse Wilson 16.03.2012 22:52
quelle
-1

Sie speichern die Daten in einer Karte. Es sieht so aus, als müssten Sie das Objekt auf den gewünschten Typ umwandeln.

    
John Kane 22.03.2011 20:20
quelle
-1

Wenn Sie eine JSON-Zeichenfolge von Map<Object, Object> möchten, denke ich, json-simple ist die bessere Wahl als Gson .

Dies ist ein kurzes Beispiel aus Ссылка :

%Vor%

Ergebnis: {"name":"foo","num":100,"balance":1000.21,"is_vip":true,"nickname":null}

Informationen zum Entschlüsseln finden Sie unter Ссылка .

    
philipjkim 16.03.2012 13:49
quelle

Tags und Links