2010-10-17 9 views
2

Je ne peux pas trouver comment désérialiser un tableau dans un objet JSON en utilisant Gson. L'objet JSON que je suis en train de désérialiser ressemble à ceci:Comment désérialiser un tableau dans un objet JSON?

{"item0":3, 
"item1":1, 
"item2":3, 
"array":[ 
    {"arrayItem1":321779321, 
    "arrayItem2":"asdfafd", 
    "arrayItem3":"asasdfadf"}]} 

je parviens à construire une classe qui ressemble à ceci:

public class Watchlist { 
private int itemn0; 
private int itemn1; 
private int itemn2; 
private Object array; 

} 

Mais quand gson essaie de désérialiser le tableau, il jette un exception:

com.google.gson.JsonParseException: Type information is unavailable, and the target object is not a primitive: <my gson array> 

Quelqu'un peut me dire comment désérialiser cela?

+0

Pouvez-vous nous montrer votre code qui est déclenchement de cette exception? –

+0

Le code qui déclenche l'exception est juste un appel de fromJson Liste de surveillance watchlist = gson.fromJson (jsonResponse, Watchlist.class); – limmy

Répondre

0

Il y a quelques problèmes ici:

Un, je ne pense pas que vous utilisez le tableau comme vous pensez que vous êtes. Vous avez "arrayItem1" à 3, mais ils sont contenus dans un seul objet JSON dans le tableau ... de sorte que le tableau n'a en réalité qu'un seul élément.

Le tableau doit probablement être quelque chose comme:

"array": [ 
    321779321, 
    "asdfafd", 
    "asasdfadf" 
] 

Le second est que le type de array dans votre classe Java est Object ... qui ne donne pas Gson aucune information de type à utiliser pour traduire la objet. Normalement, vous voulez déclarer le type de l'objet auquel le tableau correspond comme List<String> ou List<Integer> ou une autre. Cela lui donne les informations de type nécessaires ... un tableau JSON peut correspondre à un List, et le paramètre de type String indique à quel type traduire le contenu du tableau.

Le problème avec le tableau dans votre exemple est qu'il n'est pas homogène ... il contient un nombre et deux chaînes. Généralement, mélanger des types comme ceci dans un tableau/collection devrait être évité. Vous pouvez, cependant, déclarer le type de votre objet array en tant que List<String> ... vous obtiendrez simplement la forme String du nombre.

+0

Ah oui. Merci d'avoir fait remarquer cela. Tu as raison. Ce tableau a seulement 1 article. Un meilleur exemple aurait été: { "item0": 3, "item1": 1, "item2": 3, "tableau": [ { "arrayItem1": 321779321, "arrayItem2": » asdfafd », "arrayItem3": "asasdfadf"}, { "arrayItem1": 234, "arrayItem2": "asdfafd", "arrayItem3": "asdfa"}]} – limmy

+0

ColinD, Merci pour l'explication. Sur la base de ce que vous avez dit, j'ai réussi à faire fonctionner le code ci-dessus en convertissant mon tableau en List >. mais je me demandais si je pouvais convertir cela en une liste ? Cela n'est-il pas possible du tout selon votre explication? Merci. – limmy

+0

Oui, si vous avez défini une classe dont les champs correspondent aux champs des objets JSON dans votre tableau ('MyObject') et déclarez le champ de tableau comme' Liste ', cela fonctionnera très bien! – ColinD

1

votre "tableau" est un tableau. donc en classe liste des favoris

public class Watchlist { 
    private int itemn0; 
    private int itemn1; 
    private int itemn2; 
    private List<watchListarray> array; 

//constructor 
    //getter & setter of all 

} 

now watchListarray class 
public class watchListarray{ 
    String arrayItem1=""; 
    String arrayItem2=""; 
    String arrayItem3=""; 
//constructor 
//getter & setters of all 
} 

utiliser maintenant télécharger Gson se réfèrent: http://primalpop.wordpress.com/2010/06/05/parsing-json-using-gson-in-android/

Questions connexes