Mam JsonObject
nazwisko "mapping"
z następującą zawartością:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Wiem, że mogę uzyskać tablicę "servers"
z:
mapping.get("servers").getAsJsonArray()
A teraz chcę to przeanalizować JsonArray
w java.util.List
...
Jaki jest najłatwiejszy sposób na zrobienie tego?
Gson
.JsonArray
narzędziaIterable
. Po prostu znajduję nowe sposoby, inne niż dodawanie nowej biblioteki.Odpowiedzi:
Zdecydowanie najłatwiejszym sposobem jest użycie domyślnej funkcji analizującej Gson
fromJson()
.Istnieje implementacja tej funkcji , która jest odpowiednia, gdy trzeba przeprowadzić deserializację do dowolnego
ParameterizedType
(np. DowolnegoList
), czylifromJson(JsonElement json, Type typeOfT)
.W twoim przypadku wystarczy pobrać
Type
z a,List<String>
a następnie przeanalizować tablicę JSON na toType
, na przykład:W twoim przypadku
yourJson
jest toJsonElement
, ale może to być również aString
, anyReader
lub aJsonReader
.Możesz zajrzeć do dokumentacji API Gson .
źródło
Type
można znaleźć w jakim opakowaniu?Type
to wbudowany interfejs Java znajdujący się w pakieciejava.lang.reflect
getString()
zamiastget()
albo.fromJson()
narzekać.Poniższy kod używa
com.google.gson.JsonArray
. Wydrukowałem liczbę elementów na liście, a także elementy na liścieWYNIK
źródło
Przeczytałem rozwiązanie z oficjalnej strony Gson tutaj
A ten kod dla Ciebie:
Wynik wyświetlany na monitorze:
źródło
new Gson().fromJson()
Udało mi się zmusić mapowanie listy do pracy przy użyciu tylko
@SerializedName
dla wszystkich pól ... nieType
była potrzebna żadna logika .Uruchamiając kod - w kroku 4 poniżej - poprzez debugger jestem w stanie zaobserwować, że
List<ContentImage> mGalleryImages
obiekt zapełnił się danymi JSONOto przykład:
1. JSON
2. Klasa Java z listą
3. Klasa Java dla elementów listy
4. Kod Java, który przetwarza JSON
źródło
Biorąc pod uwagę, że zaczynasz
mapping.get("servers").getAsJsonArray()
, jeśli masz dostęp do guawyStreams
, możesz wykonać poniższą jedną linijkę:Notatka
StreamSupport
nie będzie w stanie pracować nadJsonElement
czcionką, więc jest ona niewystarczająca.źródło