Solved Récupérer données JSON d'une API météo
-
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...
-
@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 valeurspeed
n'est pas une chaîne de caractères mais un nombre.
En l’occurrence un nombre entier donc il faut utilisertoInt()
outoDouble()
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();
-
@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
- A quoi sert 'auto' ?
- Comment je peux récupérer la valeur de "name" ? Car ca ne se situe pas entre accolades et tient sur une seule ligne.
-
@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();
-
@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 :) -
@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.
-
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
-
À 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.
-
@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 :(
-