Parsing json avec gson

Fermé
mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 - 25 juin 2013 à 13:46
mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 - 26 juin 2013 à 12:30
salut a tous.
Jsuis debutant en android et pour mon application je dois parser ce json avec gson de google

{"STATUS":"SUCCESS","ID ":"15","LOG ":"abalo","PROFIL":"directeur","mdp":"azte"}

tout est sur une meme ligne et le resultat me retourne null
ce qui fait ke jme demande si le probleme ne vient pas de la structure du json. car normalement elle doit etre étalée sur des ligne avec chaque champ et valeur sur une ligne. Aidez moi svp.

5 réponses

mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 3
Modifié par mikdi le 25/06/2013 à 17:02
je suis pratiquement sur que cest mon reader qui doit etre null
en fait jai suivi ce tutoriel:
https://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

et mon voila comment on a recuperer le reader
Reader reader = new InputStreamReader(source);
et ce dans la classe JsonParsingActivity.

cest integralement la meme chose avec le tuto
1
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
25 juin 2013 à 17:13
Voici un exemple (je n'ai pas testé), inspiré de la documentation officielle :
https://sites.google.com/site/gson/gson-user-guide

public class MaClasse
{
    private Sring STATUS;
    private String ID;
    private String LOG;
    private String PROFIL;
    private String mdp;
}

String json = "{\"STATUS\":\"SUCCESS\",\"ID\":\"15\",\"LOG\":\"abalo\",\"PROFIL\":\"directeur\",\"mdp\":\"azte\"}";
Gson gson = new Gson();

MaClasse mc = gson.fromJson(json,MaClasse.class);

Remarque : évidemment il serait préférable que les attributs de classe STATUS, etc. soient écrits en minuscules conformément aux conventions, mais cela aurait peut-être une incidence sur le parser vu que les mots-clés sont aussi en majuscules...

Attention avec "ID " et "LOG " aussi, je doute que l'espace après le D et G soient très appréciés...
0
mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 3
25 juin 2013 à 17:27
en fait mon json, je le recoi dun url . je dois donc effectuer des operations sur cet url , le recuperer comme json avant deffectuer loperation

MaClasse mc = gson.fromJson(json,MaClasse.class);

et cest loperation qui me renvoie null maintenant.

jai fai loperation avec la classe retrieveStream de ce tuto

https://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html
0
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 25/06/2013 à 18:40
Premier point, je n'arrive pas à afficher ton tutoriel, en tout cas je n'ai pas cette classe RetrieveStream que tu dis utiliser, chez moi la page s'arrête brutalement après "We need the gson-1.6.jar from the distribution."

Bref, peu importe. Là j'ai Eclipse sous la main j'ai pu testé Gson, donc déjà mon code de tout à l'heure fonctionne bien correctement. J'ajouterai même que l'histoire de la casse dans le JSON est importante : STATUS en majuscule dans le JSON doit correspondre à une variable STATUS en majuscule dans le Java, de plus l'histoire de l'espace en trop dans les champs "ID " et "LOG " sont eux aussi sources d'erreurs puisque l'espace est impossible à utiliser dans le nom de la variable (du moins dans l'exemple simple que j'ai donné) attention donc à ce genre de choses.

Je vais adapter mon code précédent pour ton histoire d'URL, à défaut d'avoir le tien.

String url = "file:///C:/test.txt";
Reader reader = new InputStreamReader(new URL(url).openStream());

Gson gson = new Gson();

MaClasse mc = gson.fromJson(reader,MaClasse.class);
0
mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 3
25 juin 2013 à 19:08
merci beaucoup pour tes reponses mais cette ligne

Reader reader = new InputStreamReader(new URL(url).openStream());

fait sorti une IOException. xa marchait chez toi parfaitement?
0
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
25 juin 2013 à 19:19
Ca marchait chez moi parce que le fichier C:\test.txt existe sur mon ordinateur, et contient ceci :

{"STATUS":"SUCCESS","ID ":"15","LOG ":"abalo","PROFIL":"directeur","mdp":"azte"}

Après, toi tu es dans un contexte spécifique où tu devras remplacer la valeur de l'url par ce qu'il faut, probablement un "http://..." puisque je doute qu'Android ait un répertoire C:\ ^^
0
BunoCS Messages postés 15951 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 avril 2025 3 914
25 juin 2013 à 16:06
Hello,
Ton JSON a l'air correct (voici un validateur en ligne: https://jsonlint.com/
Teste en pas-à-pas pour voir ce qui ne va pas...
0
mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 3
Modifié par mikdi le 25/06/2013 à 16:23
le json est correct je pense aussi.
Mais jobtiens un NullPointerException lors de la creation de cette operation gson.fromJson(reader, SearchResponse.class).
0
BunoCS Messages postés 15951 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 avril 2025 3 914
25 juin 2013 à 16:30
Est-ce que tu as correctement défini ta classe SearchResponse?
Fais attention aux types de tes variables. Et un conseil, mets le nom de tes attributs en minuscules...
0
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
25 juin 2013 à 16:37
"mets le nom de tes attributs en minuscules"
???, ici il n'y a pas de problème avec les conventions...

"Fais attention aux types de tes variables"
Un NullPointerException ne peux pas venir d'une erreur de type, mais est généralement lié à une mauvaise initialisation des références... Par exemple ici, gson ou reader qui auraient la valeur null.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15951 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 avril 2025 3 914
25 juin 2013 à 17:07
As-tu suivi le déroulement en pas-à-pas?
Est-ce que ta variable source est valide?
0
mikdi Messages postés 16 Date d'inscription vendredi 12 avril 2013 Statut Membre Dernière intervention 30 septembre 2013 3
Modifié par mikdi le 25/06/2013 à 17:28
jai suivi le deroulement pas a pas et je pense que ma variable source aussi sera null
mais je vois pas pourquoi elle doit etre null puisque le lien que je lui ai passer en parametre
est parfaitement valide.

finalement cest ma methode retrieveStream qui retourne null je pense
0