Utiliser GSON pour analyser un tableau avec plusieurs types
Je souhaite utiliser GSON de parser le json suivants:
[
[
"hello",
1,
[2]
],
[
"world",
3,
[2]
]
]
Donc, c'est 1 tableau, contenant les 2 tableaux. L'intérieur 2 tableaux sont eux-mêmes des tableaux, composé de String, int, tableau de types.
Je ne suis pas sûr de comment je peux l'aide de classes Java pour modèle le tableau qui dispose de 3 types différents (String, int, tableau). Je commence avec:
//String json just contains the aforementioned json string.
ArrayList<ArrayList<XXX>> data = new ArrayList<ArrayList<XXX>>();
Type arrayListType = new TypeToken<ArrayList<ArrayList<XXX>>>(){}.getType();
data = gson.fromJson(json, arrayListType);
Mais ce devrait être là où le 'XXX'? Je pense qu'il devrait être un tableau, mais il devrait être un tableau avec 3 différents types de données. Alors, comment puis-je utiliser Java pour ce modèle?
Peut aider?
Merci.
source d'informationauteur Fofx
Vous devez vous connecter pour publier un commentaire.
Gson a une manipulation spéciale pour la désérialisation de certains mono-composant des tableaux dans un tableau non type. Par exemple,
int data = gson.fromJson("[3]", int.class);
pourrait attribuer la valeur int 3 pour les données.Bien sûr, la désérialisation d'un seul composant de tableau dans un tableau non type n'est pas nécessaire. Par exemple, dans l'exemple précédent pourrait être désérialisé comme
int[] data = gson.fromJson("[3]", int[].class);
.Gson souvent désérialiser un non-valeur de Chaîne dans une Chaîne, lorsque demandé. L'application de cette pour le premier exemple,
String data = gson.fromJson("[3]", String.class);
fonctionne tout aussi bien.Noter qu'il ne fonctionne pas à dire Gson désérialiser le premier exemple type de l'Objet.
Object data = gson.fromJson("[3]", Object.class);
résultats dans un parse exception se plaindre que [3] n'est pas une primitive.Appliquée à l'exemple dans la question initiale, si elle est acceptable pour traiter toutes les valeurs comme des Chaînes de caractères, puis de la désérialisation devient simple.
Malheureusement, avec Gson je n'ai pas été en mesure de comprendre une simple désérialisation approche qui permettrait de "mieux" liaison à plus spécifiques et les types mixtes dans un tableau, car Java ne fournit pas une syntaxe pour la définition d'un mélange de type tableau. Par exemple, le modèle préféré de la collection dans la question d'origine peut être
List<List<String, int, List<int>>>
mais ce n'est pas possible de définir en Java. Donc, tu dois être content avecList<List<String>> (or String[][])
ou se tourner vers une approche plus "manuelle" de l'analyse.(Oui, Java permet une déclaration de type de
List<List<Object>>
maisObject
n'est pas assez spécifique de type pour véritablement désérialiser. Aussi, comme expliqué précédemment, tentative pour désérialiser [3] pour les résultats de type Objet dans un parse exception).Petite mise à Jour: j'ai récemment eu à désérialiser certains bâclée JSON, qui comprenait une structure pas trop différente de celle de la question d'origine. J'ai fini par juste en utilisant une mesure deserializer pour créer un objet à partir du désordre tableau JSON. Semblable à l'exemple suivant.
La Gson guide de l'utilisateur couvre la désérialisation des collections de différents types avec un exemple similaire dans la "Sérialisation et la Désérialisation Collection avec des Objets de l'Arbitraire de la section" Types de.
Tout d'abord, je pense que vous pouvez vous tromper dans votre exemple ci-dessus. Un Tableau composé de trois différentes est un très inhabituel approche, pour dire le moins. Probablement votre structure json est un tableau, contenant des n-uplets. Ces n-uplets puis d'inclure un tableau.
Comme:
XXX doit être un objet contenant:
Une Chaîne
Un int (ou Entier)
Un Tableau de (je suppose) ints.
Puis vous faites un tableau de ces objets et parser le json.
Cependant, votre json semble vraiment mal formé, car tous les membres doivent être nommés, comme
Si, d'autre part, le JSON ressemble vraiment à la façon dont vous décrivez, vous devez faire des tableaux de Objet, simple et clair, et puis les jeter quand vous les lire à partir de la structure de données.