Parser les données extraites
Définition : Parser ?
Parser = faire l'analyse syntaxique
Complément : Analyse du json de infoclimat
Que renvoie infoclimat ? Quelles sont les clés et les valeurs renvoyées dans le json ?

Méthode : Parser les données...
On souhaite extraire la date, l'heure, et la température :
Lire le Json complet puis extraire 15 relevés de températures ainsi que la date et l'heure :
Le programme complet étant fourni, la description qui suit éclaire quelques étapes du tri de données :
// lecture des donnees JSON
String ligne = http.getString();
2. Utilisation de la méthode indexOf appliquée à ligne et d'un tableau pos pour stocker la position du mot clé recherché :
"sol :" pour la température au niveau du sol
"2019-" pour l'année ce qui permettra de trouver la date et l'heure.
// pos est l'index de position du mot clé "sol:"
// indexOf donne l'index de position du premier caractere du mot clé "sol:",
pos[i] = ligne.indexOf(keyword);
// pos1 est l'index de position du mot clé "2019-"
pos1[i]=ligne.indexOf(keyword2);
La méthode indexOf renvoie -1 si elle ne trouve pas le mot clé sinon elle renvoie la valeur de l'index de position du premier caractère du mot clé :
donc si pos[i] est positif on a trouvé le mot clé !
Pour la date le json renvoie : "2019-mm-jj hh:mm:ss"
le mois est en position 6
le jour est en position 9
et l'heure en position 12
3. Les variables déclarées sont :
int pos[15] ;
int pos1[15] ;
float temperature[15];
// position des valeurs recherchées mois jour heure dans la donnée : "2019-mm-jj hh:mm:ss"
int posmois=6;
int posjour=9;
int posheure=12;
// tableau de stokage des numéros de mois
String mois[15];
// tableau de stokage des dates
String jour[15];
String nommois[]={"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
// tableau de stokage des heures
String heure[15];
4. Parsing des données pour trouver l'heure, la date et le mois :
if(pos1[i]>=0)
{ /* 2019- trouve dans la ligne reçue*/
// longueur en nombre de caracteres du JSON
longueur=ligne.length();
// extraction de la date jusqu'à la fin de ligne
lignedate=ligne.substring(pos1[i], pos1[i]+20);
Serial.print("lignedate = ");
Serial.println(lignedate);
// compléter les tableaux mois, date et heure
heure[i]=&lignedate[posheure];
jour[i]=lignedate.substring(posjour,posheure);
mois[i]= lignedate.substring(posmois,posjour-1);
Remarque :
La méthode substring(debut, fin) renvoie la chaîne comprise entre l'index début et l'index fin
Pour le mois il faut retirer 1 à posjour pour enlever le symbole "-"
5. Même principe pour la température au niveau du sol :
if (pos[i] >= 0) { /* mot "sol" trouve dans les données reçues */
// indexOf donne la position du début du mot clé,
// en ajoutant sa longueur on se place à la fin.
pos[i] += keyword.length();
Serial.print("pos "); Serial.print(i);Serial.print(" = ");
Serial.println(pos[i]);
// extraction de valeur à la fin de ligne
ligne=ligne.substring(pos[i], longueur);
Serial.print("extrait = ");
Serial.println(ligne);
// extraction de la valeur située jusqu'à la première virgule
String valeur_sol=ligne.substring(0,ligne.indexOf(","));
// affichage de la donnée brute extraite
Serial.print("temperature_sol = ");
Serial.println(valeur_sol);
// conversion de la valeur du format texte au format flottant
temperature[i] = atof(&valeur_sol[0])-273;
Serial.print("temperature_sol = ");
Serial.println(temperature[i]);
6. Affichage des données :
for (int x=0; x < 15; x++){
Serial.print ("Temperature mesuree le :"); Serial.print(jour[x]);Serial.print(" "); Serial.println(nommois[mois[x].toInt()-1]);
Serial.print ("heure : "); Serial.print (heure[x]);Serial.print (" h ");Serial.print ("= "); Serial.println(temperature[x]);
Serial.println();
}
Méthode : Validation du programme
Tester le programme et vérifier sur le site que les valeurs que vous avez extraites sont cohérentes.
