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

API standards et tierces Java Discussion :

Problème données avec GSON


Sujet :

API standards et tierces Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Problème données avec GSON
    Bonjour,

    Peut-être que ce genre de question a déjà eu une réponse mis j'ai ccherché sur les différents sujets déjà traités mais je ne trouve rien. D'ores et déjà désolé si ça déjà été traité.

    J'utilse GSON por récupérer des données sur Internet dont le résultat est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {"symbol":"MSFT","stock_exchange_short":"NASDAQ","timezone_name":"America/New_York","intraday":{"2020-01-09 15:42:56":{"open":"161.65","close":"161.65","high":"161.65","low":"161.65","volume":"41201"},
    "2020-01-09 15:40:00":{"open":"161.60","close":"161.60","high":"161.62","low":"161.57","volume":"41201"},
    "2020-01-09 15:35:00":{"open":"161.56","close":"161.59","high":"161.63","low":"161.50","volume":"140067"},
    "2020-01-09 15:30:00":{"open":"161.57","close":"161.55","high":"161.64","low":"161.54","volume":"193546"}}
    Avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JsonElement data = jp.parse(new InputStreamReader((InputStream) request.getContent()));
    JsonObject obJ= data.getAsJsonObject(); //May be an array, may be an object. 
    JsonObject intradayObject = obJ.getAsJsonObject("intraday");
    J'ai ce résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {"2020-01-09 15:42:56":{"open":"161.65","close":"161.65","high":"161.65","low":"161.65","volume":"41201"},
    "2020-01-09 15:40:00":{"open":"161.60","close":"161.60","high":"161.62","low":"161.57","volume":"41201"},
    "2020-01-09 15:35:00":{"open":"161.56","close":"161.59","high":"161.63","low":"161.50","volume":"140067"},
    "2020-01-09 15:30:00":{"open":"161.57","close":"161.55","high":"161.64","low":"161.54","volume":"193546"}}
    Mais je suis incapable de récupérer les données par ligne pour les injecter dans une BDD (time="2020-01-09 15:40:00",open="161.65",close="161.65",high="161.65",low="161.65",volume="41201").

    Je suis bloqué depuis plusieurs semaines sur un projet à cause de ça.

    Merci à toutes à tous.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Avec JsonObject.keySet(), tu récupères les clefs. Tu parcours les clefs pour obtenir chaque sous objet, puis tu récupères chaque valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(String key : intradayObject.keySet()) {
          JsonObject row = intradayObject.get(key).getAsJsonObject();
          String open = row.get("open").getAsString();
          String close = row.get("close").getAsString();
          /*...*/
          saveRowToDB(key, open, close /*...*/ );
    }
    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
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Merci Joël
    Bonjour,

    for(String key : intraday.keySet()) //Erreur, il faut que je change keySet to EntrySet. Et quand je le fais, tout se complexifie.

    Mais merci énormément pour ta réponse qui m'a permis de comprendre la logique et d'orienter mes recherches.

    Voici donc une solution (contribution d'une personne sur un autre forum) qui peut servir

    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
                                Gson gson = new Gson();
    			    JsonObject intraday = objJson.getAsJsonObject("intraday");
     
                                   intraday.entrySet().forEach(e -> {
    			      JsonObject info= gson.fromJson(e.getValue(), JsonObject.class);
    			      String dateTime=e.getKey();
    			      String open =info.get("open").getAsString();
    			      String close=info.get("close").getAsString();
    			      String high =info.get("high").getAsString();
    			      String low=info.get("low").getAsString();//Float MAIS JE VEUX RECUPERER EN STRING
    			      String volume =info.get("volume").getAsString();
     
    			     // System.out.print(dateTime+ "- "+open+"\n");
     
    			      //insertionBDD dans la tablea prévue
    			      BDD.insertValues(symbol,dateTime,open,high,low,close,volume);
    Merci encore !

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par anzizeahmed Voir le message
    for(String key : intraday.keySet()) //Erreur, il faut que je change keySet to EntrySet. Et quand je le fais, tout se complexifie.
    Tu dois utiliser une vieille version. La méthode keySet() existe depuis la 2.8.1 (mai 2017, ça date !). La dernière est la 2.8.6.
    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
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Effectivement
    Tu as entièrement raison !
    En fait, j'avais une vielle version d'Eclipse et Java.
    Merci beaucoup ! Et désolé pour le code sans les balises code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage de données avec crystal report
    Par napegadie dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/12/2005, 15h45
  2. problème ajout données avec db.execute et access
    Par Dauphind dans le forum Access
    Réponses: 2
    Dernier message: 29/11/2005, 12h03
  3. Problème de mise à jour de données avec IBClientDataset
    Par Papino dans le forum Bases de données
    Réponses: 6
    Dernier message: 26/09/2005, 14h04
  4. [MySQL] Problème récupération de données avec un SELECT DISTINCT
    Par 12_darte_12 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/07/2005, 14h48
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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