est-il possible d'utiliser Gson.fromJson() pour obtenir ArrayList<ArrayList<String>>?
disons que j'ai un json
tableau de tableaux
String jsonString = [["John","25"],["Peter","37"]];
je voudrais parst en ArrayList<ArrayList<String>>
objets. lorsque j'ai utilisé
Gson.fromJson(jsonString,ArrayList<ArrayList<String>>.class)
il ne semble pas fonctionner et j'ai fait un travail en utilisant
Gson.fromJson(jsonString,String[][].class)
est-il une meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Oui, utiliser un
TypeToken
.La
TypeToken
vous permet de spécifier le type générique que vous voulez vraiment, ce qui permet de Gson trouver les types à utiliser lors de la désérialisation.Il utilise ce bijou:
Class#getGenericSuperClass()
. Le fait qu'il est une classe anonyme en fait une sous-classe deTypeToken<...>
. C'est équivalent à une classe commeLa spécification de la méthode des états qui
Si vous avez spécifié
la
Type
objet renvoyé serait en fait uneParameterizedType
sur lequel vous pouvez récupérer le type réel des arguments avecParameterizedType#getActualTypeArguments()
.Le type de l'argument serait le
Type
objet pourjava.lang.String
dans l'exemple ci-dessus. Dans votre exemple, il serait un correspondantType
objet pourArrayList<ArrayList<String>>
. Gson aurait continuer d'aller en bas de la chaîne jusqu'à ce qu'il construit l'intégralité de la carte des types de besoins.Class#getGenericSuperClass()
. Le fait qu'il est une classe anonyme en fait une sous-classe deTypeToken<...>
. C'est l'équivalent declass Anonymous extends TypeToken<...>
. La spécification de la méthode des états quiIf the superclass is a parameterized type, the Type object returned must accurately reflect the actual type parameters used in the source code.
getGenericSuperClass
méthode de cette classe doit être sous-classé. dieu que j'étais stupide..!! merci encore une fois...:)