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 :

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>";
}
?>