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}"
Angenommen, Sie haben einen gültigen JSON
Inhalt vom Typ:
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:
Ich kann meinen JSON
Inhalt dann mit:
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.