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
    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

    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
    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

    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
    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.