A partir du fichier json suivant :

[

         {

                  "mois": "Septembre",

                  "cours": [

                           {"langage": "Java", "chapitre": "Présentation du langage", "duree": "4"},

                           {"langage": "Java", "chapitre": "Introduction P.O.O", "duree": "8"},

                           {"langage": "Java", "chapitre": "Autoréférencement et surcharge", "duree": "3"},

                           {"langage": "Java", "chapitre": "Constructeurs", "duree": "2"},

                           {"langage": "Java", "chapitre": "Héritage", "duree": "6"},

                           {"langage": "Symfony", "chapitre": "Les routes", "duree": "3"},

                           {"langage": "Symfony", "chapitre": "Controleurs", "duree": "4"},

                           {"langage": "Symfony", "chapitre": "Twig", "duree": "2"},

                           {"langage": "Symfony", "chapitre": "Doctrine", "duree": "5"}

                  ]

         },

         {

                  "mois": "Octobre",

                  "cours": [

                           {"langage": "Java", "chapitre": "Interfaces", "duree": "2"},

                           {"langage": "Java", "chapitre": "Collections", "duree": "3"},

                           {"langage": "Java", "chapitre": "Conception d'interfaces graphiques", "duree": "9"},

                           {"langage": "Java", "chapitre": "Client/Serveur", "duree": "2"},

                           {"langage": "Java", "chapitre": "Servlet et JSP", "duree": "12"},

                           {"langage": "Symfony", "chapitre": "Formulaires", "duree": "2"},

                           {"langage": "Symfony", "chapitre": "Relations entre entités", "duree": "3"},

                           {"langage": "Symfony", "chapitre": "Repository", "duree": "5"},

                           {"langage": "Symfony", "chapitre": "Sécurité", "duree": "8"}

                  ]

         }

]

 

On veut afficher, sous forme de tableau, les langages étudiés, par mois :

image

 

Pour pouvoir effectuer le parsing (analyse) d'un fichier json il faut d'abord comprendre sa structure.

 

Ici on voit que le fichier est un tableau ([ ]) de 2 objets ({ }). Chaque objet comprend 2 propriétés "mois" et "cours". La propriété "mois" est elle-même un tableau de n objets. Chaque objet comprenant les 3 propriétés "langage", "chapitre" et "duree".

 

Avec le script php suivant :

<?php

    // Rôle : Parser (analyser) un fichier JSON

    // Dernière mise à jour : 05/09/2023 par Phl

   

               // Transformer le fichier JSON en une variable PHP

               $Json = file_get_contents("cours.json");

               // Convertir en tableau

               $tabCours = json_decode($Json, true);

               var_dump($tabCours); // affichage du tableau

?>

On peut confirmer la structure du fichier json :

array (size=2)

  0 =>

    array (size=2)

      'intitule' => string 'Septembre' (length=9)

      'cours' =>

        array (size=9)

          0 =>

            array (size=3)

              ...

          1 =>

            array (size=3)

              ...

          2 =>

            array (size=3)

              ...

          3 =>

            array (size=3)

              ...

          4 =>

            array (size=3)

              ...

          5 =>

            array (size=3)

              ...

          6 =>

            array (size=3)

              ...

          7 =>

            array (size=3)

              ...

          8 =>

            array (size=3)

              ...

  1 =>

    array (size=2)

      'intitule' => string 'Octobre' (length=7)

      'cours' =>

        array (size=9)

          0 =>

            array (size=3)

              ...

          1 =>

            array (size=3)

              ...

          2 =>

            array (size=3)

              ...

          3 =>

            array (size=3)

              ...

          4 =>

            array (size=3)

              ...

          5 =>

            array (size=3)

              ...

          6 =>

            array (size=3)

              ...

          7 =>

            array (size=3)

              ...

          8 =>

            array (size=3)

              ...

 

 

Exemple de script php (minimaliste) permettant d'obtenir l'affichage souhaité :

<?php

    // Rôle : Parser (analyser) un fichier JSON

    // Dernière mise à jour : 05/09/2023 par Phl

   

         // Transformer le fichier JSON en une variable PHP

         $Json = file_get_contents("cours.json");

         // Convertir en tableau

         $tabMois = json_decode($Json, true);

         //var_dump($tabMois); // affichage du tableau

        

         // $tabCours contient donc un tableau de 2 éléments.

         // Le 1er élément du tableau contient lui-même un tableau de 2 éléments.

         // Le 1er élément de ce 2ème tableau contenant la propriété intitule et le

         // 2ème la propriété cours. La propriété cours contient un autre tableau de 9 éléments...

        

         echo "<h1>Cours du 1er trimestre scolaire de l'annee 2023</h1>";

         // Exploitation du fichier json en connaissant sa structure (détaillée ci-dessus)

         // Boucle pour parcourir les 2 éléments du tableau $tabMois

         for($i=0; $i < count($tabMois); $i++)

         {

                  // Affichage du mois

                  $tab = $tabMois[$i];

                  echo "<br><h2>" . $tab['intitule'] . "</h2>";

                 

                  echo "<table border='2'><tr><th>Langage</th><th>Chapitre</th><th>Duree</th></tr>";

                  $tabCours = $tab['cours']; // $tabCours va contenir 9 éléments

                  // Parcours du tableau $tabCours

                  for($j=0; $j < count($tabCours); $j++)

                  {

                           $langage = $tabCours[$j]['langage'];

                           $chapitre = $tabCours[$j]['chapitre'];

                           $duree = $tabCours[$j]['duree'];

                           echo "<tr><td>$langage</td><td>$chapitre</td><td>$duree</td></tr>";

                  }

                  echo "</table>";

         }

?>