Json in Map.Entry-Objekt mit Gson konvertieren

8

EINFACHE VERSION

Wenn ich Gson anfordere, ein paar gültige JSON in MyMap zu konvertieren, macht es kein Problem, es zu tun

%Vor%

HARD VERSION:

Wie bekomme ich Gson, um folgendes zu tun?

%Vor%

Beispiel json, wenn Sie es wirklich brauchen.

%Vor%

weitere Notizen

Um es gut zu sagen, ich versuche einen Komponententest auszuführen, bei dem ich nur versuche, den JSON mit Gson zu lesen, und bekomme folgende Fehlermeldung:

%Vor%

Es spielt keine Rolle, ob die Schlüssel die Form "[3, rabbit]" für "{3, rabbit}"

haben     
Nouvel Travay 15.11.2016, 23:39
quelle

2 Antworten

4

Angenommen, Sie haben einen gültigen JSON Inhalt vom Typ:

%Vor%

Um zu erreichen, was Sie wollen, können Sie einfach Ihr eigenes Map.Entry Deserializer implementieren, da es nicht direkt aus dem Kasten deserialisiert werden kann, weil es kein Array ist und {3, rabbit} kein gültiges JSON -Objekt ist.

Ihr Deserializer könnte also auf einen regulären Ausdruck zurückgreifen, um den Schlüssel und den Wert zu extrahieren, und dann eine Instanz von AbstractMap.SimpleEntry mit den extrahierten Werten erstellen, etwa wie folgt:

%Vor%

Ich kann meinen JSON Inhalt dann mit:

deserialisieren %Vor%     
Nicolas Filotto 22.11.2016, 10:42
quelle
1

Gemäß der Dokumentation für Map.Entry:

  

Die einzige Möglichkeit, einen Verweis auf einen Map-Eintrag zu erhalten, stammt vom Iterator   dieser Sammlungsansicht.

Ссылка

Dies bedeutet, dass Sie den Map.Entry nicht erhalten können, bis Sie die ursprüngliche Map erstellt haben. Um das zu erreichen, was Sie wollen, müssen Sie den JSON in eine Map einlesen und dann darüber iterieren, um sie in Ihr MyDS-Objekt einzufügen.

Nachdem dies gesagt wurde, gibt es, abhängig von Ihrer Endnutzung, möglicherweise bessere Möglichkeiten, die Daten nach dem Parsen neu zu organisieren.

    
Geoff 22.11.2016 01:01
quelle

Tags und Links