Ich habe einen JsonObject
Namen "mapping"
mit folgendem Inhalt:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Ich weiß, dass ich das Array bekommen kann "servers"
mit:
mapping.get("servers").getAsJsonArray()
Und jetzt möchte ich das JsonArray
in eine java.util.List
...
Was ist der einfachste Weg, dies zu tun?
Gson
.JsonArray
GeräteIterable
. Es ist nur so, dass ich auch andere Wege finde, als eine neue Bibliothek hinzuzufügen.Antworten:
Der einfachste Weg, dies zu tun, ist definitiv die Verwendung der Standard-Parsing-Funktion von Gson
fromJson()
.Es gibt eine Implementierung dieser Funktion, die geeignet ist, wenn Sie in eine beliebige
ParameterizedType
(z. B. eine beliebigeList
) deserialisieren müssenfromJson(JsonElement json, Type typeOfT)
.In Ihrem Fall müssen Sie nur das
Type
von aList<String>
abrufen und dann das JSON-ArrayType
wie folgt analysieren :In Ihrem Fall
yourJson
ist einJsonElement
, aber es könnte auch einString
, irgendeinReader
oder ein seinJsonReader
.Vielleicht möchten Sie einen Blick auf die Gson API-Dokumentation werfen .
quelle
Type
kann in welchem Paket gefunden werden?Type
ist eine in Java integrierte Schnittstelle im Paketjava.lang.reflect
getString()
stattget()
sonst.fromJson()
beschwert.Der folgende Code wird verwendet
com.google.gson.JsonArray
. Ich habe die Anzahl der Elemente in der Liste sowie die Elemente in der Liste gedrucktAUSGABE
quelle
Ich habe die Lösung von der offiziellen Website von Gson hier gelesen
Und dieser Code für Sie:
Ergebnisanzeige auf dem Monitor:
quelle
new Gson().fromJson()
Ich war in der Lage, die Listenzuordnung so zu gestalten, dass sie nur
@SerializedName
für alle Felder verwendet wurde. Es war keine LogikType
erforderlich.Wenn ich den Code - in Schritt 4 unten - über den Debugger ausführe , kann ich feststellen, dass das
List<ContentImage> mGalleryImages
Objekt mit den JSON-Daten gefüllt istHier ist ein Beispiel:
1. Der JSON
2. Java-Klasse mit der Liste
3. Java-Klasse für die Listenelemente
4. Der Java-Code, der den JSON verarbeitet
quelle
Angenommen , Sie beginnen mit
mapping.get("servers").getAsJsonArray()
, wenn Sie Zugriff haben GuavaStreams
, können Sie das tun unter Einzeiler:Hinweis
StreamSupport
kann denJsonElement
Typ nicht bearbeiten , daher ist er nicht ausreichend.quelle