IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Parser du Json en Java


Sujet :

Services Web Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut Parser du Json en Java
    Bonjour, j'ai un problème avec le JSON et JAVA. Je n'y arrive pas, c'est plus dure qu'en PHP^^.

    Mon but c'est d'avoir des Json de ce type pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"nom":"Pr\u00e9nom_1","tel":"0601"},{"nom":"Pr\u00e9nom_2","tel":"0602"},{"nom":"Pr\u00e9nom_3","tel":"0603"}]

    Je récup ma page dans la variable "result":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    try {
                JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(result)));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            JsonParser jsonParser = new JsonParser();
            JsonArray userArray = jsonParser.parse(result).getAsJsonArray();
            for (JsonElement aUser : userArray) {
                Log.i( "Json2", aUser.toString());
                for (Map.Entry<String, JsonElement> valueEntry : aUser.getAsJsonObject().entrySet()) {
                    Log.i( "Json3", valueEntry.getKey().toString() + " " + valueEntry.getValue().toString());
                }
     
     
                Log.i( "Json", "------");
            }

    J'arrive a boucler sur chaque éléments comme on peut le voir dans les log, la première ligne correspond a chaque ligne du json et les deux suivante a la seconde boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {"nom":"Prénom_1","tel":"0601"}
    nom "Prénom_1"
    tel "0601"
     ------
    {"nom":"Prénom_2","tel":"0602"}
    nom "Prénom_2"
    tel "0602"
    ------
    {"nom":"Prénom_3","tel":"0603"}
    nom "Prénom_3"
    tel "0603"
     ------

    Mon problème comme on peut le voir ici, c'est que j'arrive pas a extraire les éléments de chaque "personnes" dans la première boucle c'est ensuite quand je récup les données de la première boucle qu'on voit lignes 1, 5 et 9 que je peux reboucler dessus comme on peut le voir ligne 2, 3 et 6, 7... Mais ça me va pas, car je ne peux pas accéder a chaque variable en même temps vu que la ça me les donnes lignes par ligne et que je ne sais même pas ce que j'affiche.


    Mon autre problèmes sera que si je fais des Json plus complexe comme celui comment je boucle juste sur la partie personnes ou la partie autre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"personnes":[{"nom":"Pr\u00e9nom_1","tel":"0601"},{"nom":"Pr\u00e9nom_2","tel":"0602"},{"nom":"Pr\u00e9nom_3","tel":"0603"}],"autre":[""]}
    Bref, comme on peut le voir, je galère et encore la j'ai bien progressé par rapport au début de mon problème. J'ai limite envie de gérer l'affichage si on peut depuis la page web et de faire des requêtes différentes a chaque fois au lieux d'une seul fois en json et de gérer les données dans l'application

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    On boucle quand il y a naturellement répétition (dans un tableau, il y a plusieurs éléments, on les traite chacun l'un après l'autre), ou quand on veut faire du traitement générique (parcourir automatiquement l'arbre du haut vers le bas récursivement).

    Quand tu sais quel propriété extraire, récupère directement la valeur, ce sera plus simple.

    Dans ta seconde question, tu parles de récupérer un élément personne et un élément autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JsonParser jsonParser = new JsonParser();
            JsonObject data = jsonParser.parse(result).getAsJsonObject();
     
    JsonArray personnes = data.getAsJsonObject("personnes"); // tu sais qu'il y a un tableau pour la propriété personnes
    JsonArray autres = data.getAsJsonObject("autres");
    Pareil pour chaque personne, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (Map.Entry<String, JsonElement> valueEntry : aUser.getAsJsonObject().entrySet()) {
     
    JsonObject personne : valueEntry.getValue().asJsonObject();
     
    String nom = personne.getAsJSonPrimitive("nom").getAsString();
     
                }
    Mais cette API (GSon) elle est effectivement complexe, parce qu'elle est plutôt prévue pour faire de l'analyse automatique. Et en particulier de la conversion automatique de JSon vers des objets Java.

    Soit tu utilises une API beaucoup plus simple, comme org.json ou JSON.simple, soit tu t'appuies sur le système de conversion automatique en Java, et ça deviendra relativement simple.

    Par exemple, tu peux créer une classe Personne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Personne {
       public String nom;
       public String tel;
    }
    Et avec un JSON : {"nom":"xxx","tel":"yyy"}, il te suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne personne = new Gson().fromJson(json, Personne.class);
    (ici json c'est un reader par exemple : json = new InputStreamReader(new FileInputStream(result))Un peu plus complexe pour les tableaux, mais tout est dans la doc pour expliquer comment faire (au final tu pourras obtenir un seul objet avec toutes les données, en particulier en implémentant un JsonDeserializer). Il y a ce tuto déjà (chercher désérializer) : http://jmdoudoux.developpez.com/cour.../chap-gson.php et il y a justement un exemple avec un tableau de personnes (en revanche elle date un peu, mais tout ce qu'elle montre fonctionne, c'est juste que certains trucs ont été encore simplifiés (par exemple dans le tuto on a Gson gson = new GsonBuilder().create(); alors que tu peux écrire Gson gson = new Gson();) ). Et tu en trouveras plein sur le web.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Merci, je pensais pas que c'était si compliqué. En PHP c'est tellement simple^^. Je vais réessayer et je reviens si je n'y arrive toujours pas. En ce moment j'apprends le java en dev des app pour android et en même temps je test en bidouillant donc c'est pas toujours facile.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Si c'est trop compliqué pour toi GSON, utilse JSon.org :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String json = "{ \"nom\":\"xxx\", \"age\": 10 }";
    JSONObject jsonobject = new JSONObject( json );
     
    String nom = jsonobject.getString("nom");
    int age = jsonobject.getInt("age");
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    J'ai réussi!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
            String json = result;
            JSONObject jsonobject = null;
            try {
                jsonobject = new JSONObject( json );
                int length = jsonobject.getJSONArray("legumes").length();
                for (int i = 0; i < length; i++) {
                    String legumes = jsonobject.getJSONArray("legumes").get(i).toString();
     
                    JSONObject jsonobject2 = new JSONObject( legumes );
                    String id = jsonobject2.get("id").toString();
                    String nom_produit = jsonobject2.get("nom_produit").toString();
                    String cug_id = jsonobject2.get("cug_id").toString();
                    Log.i( "debug", nom_produit + " " + cug_id );
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
    Maintenant second objectif: réussi a mettre toute des données dans une ExpandableListView et avoir un EditText qui en fonction de ce qu'on lui a écrit affiche la liste en conséquence. Je pense que pour cette partie que je ferais des requête pour récupérer le flux json a jour sauf si ça peut être fait simplement en JAVA directement.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Beaucoup plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try {
                JSONObject jsonobject = new JSONObject( json );
                JSONArray array = jsonobject.getJSONArray("legumes");
                for(int i=0; i<array.length; i++) {
                    JSONObject legume = array.getJSONObject(i);
                    String id = legume.getString("id");
                    String nomProduit = legume.getString("nom_produit");
                    String cug_id = legume.getString("cug_id");
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
    En revanche, ExpandableListView et EditText, c'est de l'Android, en dehors de mes compétences et aucun rapport avec JSon. Pose la question dans le forum Android. En plus, il n'est pas impossible qu'il y ait des API spécifiques pour le JSON (si tu avais posé la question dans le forum adéquat dès le début, tu aurais eu une réponse plus adaptée).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Merci, je m'étais inspiré des exemples plus haut et j'avais eu du mal^^. Mon problème était le json et mon second objectif était a titre informatif^^. Merci pour votre aide.

Discussions similaires

  1. Parser un fichier JSON en Java
    Par zinga dans le forum Android
    Réponses: 5
    Dernier message: 09/02/2011, 17h45
  2. Cherche parser de bytecode en Java
    Par otsgd dans le forum Langage
    Réponses: 3
    Dernier message: 24/10/2006, 11h16
  3. [Reflection]parser une classe de java.
    Par burkan21 dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 02/12/2005, 21h05
  4. [Html] HTMLPARSER pour parser du html en Java
    Par alexthomas dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 01/09/2005, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo