Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. Récupérer données JSON d'une API météo
Qt 6.11 is out! See what's new in the release blog

Récupérer données JSON d'une API météo

Scheduled Pinned Locked Moved Solved French
17 Posts 3 Posters 3.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Bonsoir,

    @Ayckinn said in Récupérer données JSON d'une API météo:

    "descritpion"

    Ne serait-ce pas plutôt "description" ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • A Offline
      A Offline
      Ayckinn
      wrote on last edited by
      #3

      @Ayckinn said in Récupérer données JSON d'une API météo:

      description

      pfff !! Si, effectivement, dyslexie, quand tu nous tient -_-'
      merci
      Mais malheureusement, cela ne résous pas mon problème une fois rectifié.. Ca m'aurait arrangé :)

      KroMignonK 1 Reply Last reply
      0
      • A Ayckinn

        @Ayckinn said in Récupérer données JSON d'une API météo:

        description

        pfff !! Si, effectivement, dyslexie, quand tu nous tient -_-'
        merci
        Mais malheureusement, cela ne résous pas mon problème une fois rectifié.. Ca m'aurait arrangé :)

        KroMignonK Offline
        KroMignonK Offline
        KroMignon
        wrote on last edited by KroMignon
        #4

        @Ayckinn said in Récupérer données JSON d'une API météo:

        Mais malheureusement, cela ne résous pas mon problème une fois rectifié.. Ca m'aurait arrangé :)

        Je pense que tu n'as pas regardé en détails ton document JSON, si je le remet en forme de façon plus lisible:

        {
            "base":"stations",
            "clouds":{
                "all":0
            },
            "cod":200,
            "coord":{
                "lat":43.6333,
                "lon":3.9
            },
            "dt":1616363809,
            "id":3028337,
            "main":{
                "feels_like":275.82,
                "humidity":40,
                "pressure":1014,
                "temp":284.21,
                "temp_max":284.26,
                "temp_min":284.15
            },
            "name":"Castelnau-le-Lez",
            "sys":{
                "country":"FR",
                "id":6518,
                "sunrise":1616305545,
                "sunset":1616349438,
                "type":1
            },
            "timezone":3600,
            "visibility":10000,
            "weather":[
                {
                    "description":"ciel dégagé",
                    "icon":"01n",
                    "id":800,
                    "main":"Clear"
                }
            ],
            "wind":{
                "deg":350,
                "speed":8.75
            }
        }
        

        Moi je ferais:

            JSON_array  = loadJSONFile.object()["weather"].toArray();
            JSON_object = JSON_array.first().toObject();
            JSON_value  = JSON_object ["description"].toString();
        

        EDIT:
        quelques explications:

        • l'élément ROOT est un objet JSON => loadJSONFile.object()
        • de l'objet ROOT, on cherche le membre weather qui est une table ==> ["weather"].toArray()
        • on veut le premier élément, qui est un objet ==> JSON_array.first().toObject();
        • et de cet objet on veut le membre description qui est une chaîne de caractères ==> JSON_object ["description"].toString()

        It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

        A 1 Reply Last reply
        1
        • KroMignonK KroMignon

          @Ayckinn said in Récupérer données JSON d'une API météo:

          Mais malheureusement, cela ne résous pas mon problème une fois rectifié.. Ca m'aurait arrangé :)

          Je pense que tu n'as pas regardé en détails ton document JSON, si je le remet en forme de façon plus lisible:

          {
              "base":"stations",
              "clouds":{
                  "all":0
              },
              "cod":200,
              "coord":{
                  "lat":43.6333,
                  "lon":3.9
              },
              "dt":1616363809,
              "id":3028337,
              "main":{
                  "feels_like":275.82,
                  "humidity":40,
                  "pressure":1014,
                  "temp":284.21,
                  "temp_max":284.26,
                  "temp_min":284.15
              },
              "name":"Castelnau-le-Lez",
              "sys":{
                  "country":"FR",
                  "id":6518,
                  "sunrise":1616305545,
                  "sunset":1616349438,
                  "type":1
              },
              "timezone":3600,
              "visibility":10000,
              "weather":[
                  {
                      "description":"ciel dégagé",
                      "icon":"01n",
                      "id":800,
                      "main":"Clear"
                  }
              ],
              "wind":{
                  "deg":350,
                  "speed":8.75
              }
          }
          

          Moi je ferais:

              JSON_array  = loadJSONFile.object()["weather"].toArray();
              JSON_object = JSON_array.first().toObject();
              JSON_value  = JSON_object ["description"].toString();
          

          EDIT:
          quelques explications:

          • l'élément ROOT est un objet JSON => loadJSONFile.object()
          • de l'objet ROOT, on cherche le membre weather qui est une table ==> ["weather"].toArray()
          • on veut le premier élément, qui est un objet ==> JSON_array.first().toObject();
          • et de cet objet on veut le membre description qui est une chaîne de caractères ==> JSON_object ["description"].toString()
          A Offline
          A Offline
          Ayckinn
          wrote on last edited by Ayckinn
          #5

          @KroMignon

          MERCI BEAUCOUP !!! et surtout, merci d'avoir pris le temps d'expliquer le raisonnement !
          Je n'ai effectivement pas eu l'intelligence de le mettre de façon plus lisible, comme tu l'as fait.
          Mais tes explications me sont très utiles pour comprendre comment chercher les données.
          Encore merci, je peux enfin la finir ! ;)

          KroMignonK 1 Reply Last reply
          0
          • A Ayckinn

            @KroMignon

            MERCI BEAUCOUP !!! et surtout, merci d'avoir pris le temps d'expliquer le raisonnement !
            Je n'ai effectivement pas eu l'intelligence de le mettre de façon plus lisible, comme tu l'as fait.
            Mais tes explications me sont très utiles pour comprendre comment chercher les données.
            Encore merci, je peux enfin la finir ! ;)

            KroMignonK Offline
            KroMignonK Offline
            KroMignon
            wrote on last edited by
            #6

            @Ayckinn De rien, tu étais sur la bonne voie. Il ne te manquais pas grand-chose ;)

            It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

            A 1 Reply Last reply
            0
            • KroMignonK KroMignon

              @Ayckinn De rien, tu étais sur la bonne voie. Il ne te manquais pas grand-chose ;)

              A Offline
              A Offline
              Ayckinn
              wrote on last edited by
              #7

              @KroMignon
              Pour être honnête, même si j'avais réussi, j'aurais pas réellement compris comment j'ai fait, j'ai mixé un peu tout ce que je trouvais sur Internet et je faisais des tests..
              C'est en ça que ton explication vaut plus chère que la solution, parce que maintenant, je sais COMMENT réfléchir ;)

              1 Reply Last reply
              0
              • A Offline
                A Offline
                Ayckinn
                wrote on last edited by
                #8

                Avec mes excuses... Je reviens car je n'arrive pas a récupérer les valeurs dans [name] par exemple, [main][temp] ou [wind][speed].

                J'ai essayé plusieurs choses avant de reposter en me basant sur la solution donnée ci-dessus, mais comme ce ne sont pas des tables, je n'arrive pas a récupérer les valeurs.
                Je pensais avoir compris le principe, apparemment je suis plus truffe que je le croyais.

                1er test

                JSON_object = loadJSONFile.object()["wind"].toObject();
                JSON_value = JSON_object["speed"].toString();
                

                2eme test

                JSON_array = loadJSONFile.object()["main"].toArray();
                JSON_object = JSON_array[0].toObject();
                JSON_value = JSON_object["temp"].toString();
                

                Ca me semblait tellement simple avec les explications...

                KroMignonK 1 Reply Last reply
                0
                • A Ayckinn

                  Avec mes excuses... Je reviens car je n'arrive pas a récupérer les valeurs dans [name] par exemple, [main][temp] ou [wind][speed].

                  J'ai essayé plusieurs choses avant de reposter en me basant sur la solution donnée ci-dessus, mais comme ce ne sont pas des tables, je n'arrive pas a récupérer les valeurs.
                  Je pensais avoir compris le principe, apparemment je suis plus truffe que je le croyais.

                  1er test

                  JSON_object = loadJSONFile.object()["wind"].toObject();
                  JSON_value = JSON_object["speed"].toString();
                  

                  2eme test

                  JSON_array = loadJSONFile.object()["main"].toArray();
                  JSON_object = JSON_array[0].toObject();
                  JSON_value = JSON_object["temp"].toString();
                  

                  Ca me semblait tellement simple avec les explications...

                  KroMignonK Offline
                  KroMignonK Offline
                  KroMignon
                  wrote on last edited by KroMignon
                  #9

                  @Ayckinn said in Récupérer données JSON d'une API météo:

                  Je pensais avoir compris le principe, apparemment je suis plus truffe que je le croyais.

                  1er test
                  JSON_object = loadJSONFile.object()["wind"].toObject();
                  JSON_value = JSON_object["speed"].toString();

                  Le parser JSON n'est pas super sympa, j'en ai déjà fait l'amer expérience.
                  Le problème ici, c'est que la valeur speed n'est pas une chaîne de caractères mais un nombre.
                  En l’occurrence un nombre entier donc il faut utiliser toInt() ou toDouble()

                  Donc pour lire la valeur:

                  auto jsonRoot = loadJSONFile.object();
                  auto jsonWind = jsRoot["wind"].toObject();
                  qDebug() << "Speed is" << jsonWind ["speed"].toInt(); 
                  qDebug() << "Speed is" << jsonWind ["speed"].toDouble(); 
                  

                  2eme test
                  JSON_array = loadJSONFile.object()["main"].toArray();
                  JSON_object = JSON_array[0].toObject();
                  JSON_value = JSON_object["temp"].toString();

                  Ca me semblait tellement simple avec les explications...

                  Idem ici:

                  auto jsonRoot = loadJSONFile.object();
                  auto jsonMain = jsRoot["main"].toObject();
                  qDebug() << "Temperatur is" << jsonMain["temp"].toDouble(); 
                  

                  It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                  A 1 Reply Last reply
                  0
                  • KroMignonK KroMignon

                    @Ayckinn said in Récupérer données JSON d'une API météo:

                    Je pensais avoir compris le principe, apparemment je suis plus truffe que je le croyais.

                    1er test
                    JSON_object = loadJSONFile.object()["wind"].toObject();
                    JSON_value = JSON_object["speed"].toString();

                    Le parser JSON n'est pas super sympa, j'en ai déjà fait l'amer expérience.
                    Le problème ici, c'est que la valeur speed n'est pas une chaîne de caractères mais un nombre.
                    En l’occurrence un nombre entier donc il faut utiliser toInt() ou toDouble()

                    Donc pour lire la valeur:

                    auto jsonRoot = loadJSONFile.object();
                    auto jsonWind = jsRoot["wind"].toObject();
                    qDebug() << "Speed is" << jsonWind ["speed"].toInt(); 
                    qDebug() << "Speed is" << jsonWind ["speed"].toDouble(); 
                    

                    2eme test
                    JSON_array = loadJSONFile.object()["main"].toArray();
                    JSON_object = JSON_array[0].toObject();
                    JSON_value = JSON_object["temp"].toString();

                    Ca me semblait tellement simple avec les explications...

                    Idem ici:

                    auto jsonRoot = loadJSONFile.object();
                    auto jsonMain = jsRoot["main"].toObject();
                    qDebug() << "Temperatur is" << jsonMain["temp"].toDouble(); 
                    
                    A Offline
                    A Offline
                    Ayckinn
                    wrote on last edited by
                    #10

                    @KroMignon
                    Je confirme... Je ne pensais pas que ce serait aussi complexe. En tout cas, merci beaucoup d'avoir encore une fois, pris le temps de me répondre et de m'expliquer surtout.

                    Me reste 2 questions et promis, je te laisse tranquille ;) J'aurais toutes les infos dont j'ai besoin

                    1. A quoi sert 'auto' ?
                    2. Comment je peux récupérer la valeur de "name" ? Car ca ne se situe pas entre accolades et tient sur une seule ligne.
                    KroMignonK 1 Reply Last reply
                    0
                    • A Ayckinn

                      @KroMignon
                      Je confirme... Je ne pensais pas que ce serait aussi complexe. En tout cas, merci beaucoup d'avoir encore une fois, pris le temps de me répondre et de m'expliquer surtout.

                      Me reste 2 questions et promis, je te laisse tranquille ;) J'aurais toutes les infos dont j'ai besoin

                      1. A quoi sert 'auto' ?
                      2. Comment je peux récupérer la valeur de "name" ? Car ca ne se situe pas entre accolades et tient sur une seule ligne.
                      KroMignonK Offline
                      KroMignonK Offline
                      KroMignon
                      wrote on last edited by KroMignon
                      #11

                      @Ayckinn said in Récupérer données JSON d'une API météo:

                      Me reste 2 questions et promis, je te laisse tranquille ;) J'aurais toutes les infos dont j'ai besoin

                      A quoi sert 'auto' ?

                      auto c'est pour les fainéants comme moi qui ne veule pas réécrire le type de la variable qu'ils sont entrain de créer:

                      • https://en.cppreference.com/w/cpp/language/auto
                      • https://www.geeksforgeeks.org/type-inference-in-c-auto-and-decltype/

                      Comment je peux récupérer la valeur de "name" ? Car ca ne se situe pas entre accolades et tient sur une seule ligne.

                      Les accolades {}, c'est pour définir un nouvel objet et les crochets [] c'est pour définir une table.
                      S'il n'y a ni l'un ni l'autre c'est que c'est une valeur, ici en l’occurrence une chaîne de caractères ;)

                      auto jsonRoot = loadJSONFile.object(); // idem que QJsonObject jsonRoot = loadJSONFile.object();
                      qDebug() << "name is" << jsonRoot["name"].toString();
                      

                      It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                      A 1 Reply Last reply
                      0
                      • KroMignonK KroMignon

                        @Ayckinn said in Récupérer données JSON d'une API météo:

                        Me reste 2 questions et promis, je te laisse tranquille ;) J'aurais toutes les infos dont j'ai besoin

                        A quoi sert 'auto' ?

                        auto c'est pour les fainéants comme moi qui ne veule pas réécrire le type de la variable qu'ils sont entrain de créer:

                        • https://en.cppreference.com/w/cpp/language/auto
                        • https://www.geeksforgeeks.org/type-inference-in-c-auto-and-decltype/

                        Comment je peux récupérer la valeur de "name" ? Car ca ne se situe pas entre accolades et tient sur une seule ligne.

                        Les accolades {}, c'est pour définir un nouvel objet et les crochets [] c'est pour définir une table.
                        S'il n'y a ni l'un ni l'autre c'est que c'est une valeur, ici en l’occurrence une chaîne de caractères ;)

                        auto jsonRoot = loadJSONFile.object(); // idem que QJsonObject jsonRoot = loadJSONFile.object();
                        qDebug() << "name is" << jsonRoot["name"].toString();
                        
                        A Offline
                        A Offline
                        Ayckinn
                        wrote on last edited by
                        #12

                        @KroMignon
                        Bon ben voilà, j'ai tout ce qu'il me faut cette fois... Comme promis, je te laisse tranquille !! :)
                        ENORME merci a toi ! Je ne sais pas où tu habites mais je t'aurais bien offert une bière ^^
                        Bonne journée :)

                        KroMignonK 1 Reply Last reply
                        0
                        • A Ayckinn

                          @KroMignon
                          Bon ben voilà, j'ai tout ce qu'il me faut cette fois... Comme promis, je te laisse tranquille !! :)
                          ENORME merci a toi ! Je ne sais pas où tu habites mais je t'aurais bien offert une bière ^^
                          Bonne journée :)

                          KroMignonK Offline
                          KroMignonK Offline
                          KroMignon
                          wrote on last edited by
                          #13

                          @Ayckinn said in Récupérer données JSON d'une API météo:

                          Bonne journée :)

                          Merci, je boirai une p'tite bière à ta santé ce soir ;)

                          Pour info, j'habite en Allemagne tout près de Strasbourg.

                          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                          A 1 Reply Last reply
                          0
                          • KroMignonK KroMignon

                            @Ayckinn said in Récupérer données JSON d'une API météo:

                            Bonne journée :)

                            Merci, je boirai une p'tite bière à ta santé ce soir ;)

                            Pour info, j'habite en Allemagne tout près de Strasbourg.

                            A Offline
                            A Offline
                            Ayckinn
                            wrote on last edited by
                            #14

                            @KroMignon

                            Avec plaisir, je ferais de même, parce que là, t'as vraiment assuré :)

                            Ah dommage, t'es un peu loin, je suis dans le sud de la France

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #15

                              À tout hasard, pour une expérience plus "naturelle" de manipulation de données JSON, la librairie C++ json de nlohmann est très sympa à utiliser et facile à intégrer dans un projet.

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              KroMignonK 1 Reply Last reply
                              0
                              • SGaistS SGaist

                                À tout hasard, pour une expérience plus "naturelle" de manipulation de données JSON, la librairie C++ json de nlohmann est très sympa à utiliser et facile à intégrer dans un projet.

                                KroMignonK Offline
                                KroMignonK Offline
                                KroMignon
                                wrote on last edited by
                                #16

                                @SGaist Merci pour l'info.

                                J'étais déjà tombé dessus, mais comme j'ai une application qui utilise un vieux compilateur C++ pas entièrement C++11 compatible (WindowsXP oblige!!!!), je ne pouvais pas l'utiliser :(

                                It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                                1 Reply Last reply
                                0
                                • SGaistS Offline
                                  SGaistS Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #17

                                  @KroMignon said in Récupérer données JSON d'une API météo:

                                  WindowsXP oblige!!!!

                                  Je compatis

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0

                                  • Login

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • Users
                                  • Groups
                                  • Search
                                  • Get Qt Extensions
                                  • Unsolved