Parser les données extraites

DéfinitionParser ?

Parser = faire l'analyse syntaxique

ComplémentAnalyse du json de infoclimat

Que renvoie infoclimat ? Quelles sont les clés et les valeurs renvoyées dans le json ?

MéthodeParser les données...

On souhaite extraire la date, l'heure, et la température :

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

1
// lecture des donnees JSON
2
         String ligne = http.getString();
3

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.

1
 // pos est l'index de position du mot clé "sol:"
2
        // indexOf donne l'index de position du premier caractere du mot clé "sol:",
3
           pos[i] = ligne.indexOf(keyword);
4
5
        // pos1 est l'index de position du mot clé "2019-"
6
           pos1[i]=ligne.indexOf(keyword2);
7
        

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 :

1
int pos[15] ;
2
int pos1[15] ;
3
float temperature[15];
4
5
// position des valeurs recherchées mois jour heure dans la donnée : "2019-mm-jj hh:mm:ss"
6
int posmois=6;
7
int posjour=9;
8
int posheure=12;
9
// tableau de stokage des numéros de mois
10
String mois[15];
11
//  tableau de stokage des dates
12
String jour[15];
13
String nommois[]={"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre"};
14
//  tableau de stokage des heures
15
String heure[15];
16

4. Parsing des données pour trouver l'heure, la date et le mois :

1
   if(pos1[i]>=0) 
2
            { /* 2019- trouve dans la ligne reçue*/
3
                              
4
            // longueur en nombre de caracteres du JSON
5
                 longueur=ligne.length();
6
              
7
            // extraction de la date jusqu'à la fin de ligne
8
                 lignedate=ligne.substring(pos1[i], pos1[i]+20);
9
                 Serial.print("lignedate = ");
10
                 Serial.println(lignedate);
11
                                 
12
            // compléter les tableaux mois, date et heure
13
                 heure[i]=&lignedate[posheure];
14
            
15
                 jour[i]=lignedate.substring(posjour,posheure);
16
                 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 :

1
if (pos[i] >= 0) { /* mot "sol" trouve dans les données reçues */
2
       // indexOf donne la position du début du mot clé,
3
       // en ajoutant sa longueur on se place à la fin.
4
       pos[i] += keyword.length();
5
       
6
       Serial.print("pos ");  Serial.print(i);Serial.print(" = ");
7
       Serial.println(pos[i]); 
8
               
9
      // extraction de valeur à la fin de ligne
10
             ligne=ligne.substring(pos[i], longueur);
11
             Serial.print("extrait = ");
12
             Serial.println(ligne);
13
14
          // extraction de la valeur située jusqu'à la première virgule 
15
             String valeur_sol=ligne.substring(0,ligne.indexOf(","));
16
          // affichage de la donnée brute extraite
17
             Serial.print("temperature_sol = ");
18
             Serial.println(valeur_sol);
19
     
20
          
21
          // conversion de la valeur du format texte au format flottant
22
             temperature[i] = atof(&valeur_sol[0])-273;
23
             Serial.print("temperature_sol = ");
24
             Serial.println(temperature[i]);

6. Affichage des données :

1
 for (int x=0; x < 15; x++){
2
       Serial.print ("Temperature mesuree le :"); Serial.print(jour[x]);Serial.print(" "); Serial.println(nommois[mois[x].toInt()-1]); 
3
       
4
       Serial.print ("heure : "); Serial.print (heure[x]);Serial.print (" h ");Serial.print ("= "); Serial.println(temperature[x]); 
5
       Serial.println();
6
 
7
   } 

MéthodeValidation du programme

Tester le programme et vérifier sur le site que les valeurs que vous avez extraites sont cohérentes.