J'ai un JsonObject
nommé "mapping"
avec le contenu suivant:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Je sais que je peux obtenir le tableau "servers"
avec:
mapping.get("servers").getAsJsonArray()
Et maintenant, je veux analyser cela JsonArray
en un java.util.List
...
Quelle est la manière la plus simple de faire ça?
Gson
.JsonArray
outilsIterable
. C'est juste que je trouve aussi de nouveaux moyens autres que l'ajout d'une nouvelle bibliothèque.Réponses:
Le moyen le plus simple de le faire est d'utiliser la fonction d'analyse par défaut de Gson
fromJson()
.Il existe une implémentation de cette fonction adaptée lorsque vous devez désérialiser en any
ParameterizedType
(par exemple, anyList
), ce qui estfromJson(JsonElement json, Type typeOfT)
.Dans votre cas, il vous suffit d'obtenir le
Type
of aList<String>
, puis d'analyser le tableau JSON en celaType
, comme ceci:Dans votre cas,
yourJson
c'est aJsonElement
, mais cela peut aussi être aString
, anyReader
ou aJsonReader
.Vous voudrez peut-être consulter la documentation de l'API Gson .
la source
Type
peut être trouvé dans quel paquet?Type
est une interface Java intégrée située dans le packagejava.lang.reflect
getString()
place deget()
sinon je me.fromJson()
plaignais.Le code ci-dessous utilise
com.google.gson.JsonArray
. J'ai imprimé le nombre d'éléments dans la liste ainsi que les éléments dans la listePRODUCTION
la source
J'ai lu la solution sur le site officiel de Gson ici
Et ce code pour vous:
Affichage des résultats sur le moniteur:
la source
new Gson().fromJson()
J'ai pu faire fonctionner le mappage de liste simplement en utilisant
@SerializedName
pour tous les champs .. aucune logiqueType
n'était nécessaire.En exécutant le code - à l'étape 4 ci - dessous - via le débogueur, je suis en mesure d'observer que l'
List<ContentImage> mGalleryImages
objet rempli avec les données JSONVoici un exemple:
1. Le JSON
2. Classe Java avec la liste
3. Classe Java pour les éléments de liste
4. Le code Java qui traite le JSON
la source
Étant donné que vous commencez par
mapping.get("servers").getAsJsonArray()
, si vous avez accès à GuavaStreams
, vous pouvez faire le one-liner ci-dessous:La note
StreamSupport
ne pourra pas fonctionner sur leJsonElement
type, donc c'est insuffisant.la source