Lire un fichier JSON en PHP (version Quiz)

À la fin de ce cours, tu seras capable de lire et d'afficher en PHP les informations contenues dans un fichier JSON représentant un quiz en utilisant une fonction séparée pour la gestion des données.

    6tq
  • Découverte

Les notions essentielles à retenir

  • La structure JSON pour représenter des données structurées (ici, un quiz).
  • Les fonctions PHP pour lire un fichier JSON : file_get_contents() et json_decode().
  • Parcourir des données JSON décodées avec PHP (tableaux associatifs).
  • L'importance de séparer la lecture des données du traitement (affichage).

Exemple de fichier JSON (quiz.json)

Voici un exemple concret d'un quiz :

{
  "code": "quiz_cg_01",
  "nom": "Quiz de culture générale",
  "style": "classique",
  "couleur": "#FF5733",
  "imageFond": "fond_quiz.png",
  "questions": [
    {
      "question": "Quelle est la capitale de la Belgique ?",
      "imageFondQuestion": "bruxelles.png",
      "imageFondReponse": "bruxelles2.png",
      "propositions": [
        { "texte": "Bruxelles", "correct": true },
        { "texte": "Liège", "correct": false },
        { "texte": "Anvers", "correct": false }
      ]
    },
    {
      "question": "Quelle langue est principalement parlée en Argentine ?",
      "imageFondReponse": "bruxelles.png",
      "propositions": [
        { "texte": "Espagnol", "correct": true },
        { "texte": "Portugais", "correct": false },
        { "texte": "Italien", "correct": false },
        { "texte": "Anglais", "correct": false, "mystere": true }
      ]
    }
  ]
}

Lire le fichier JSON dans une fonction séparée (data.php)

Crée un fichier nommé data.php avec une fonction spécifique pour lire le fichier JSON :

<?php
function lireQuiz($nomFichier) {
    // Lire le contenu du fichier JSON
    $jsonData = file_get_contents($nomFichier);

    // Décoder le JSON vers un tableau associatif PHP
    $quiz = json_decode($jsonData, true);

    return $quiz;
}
?>

Afficher les données du quiz (index.php)

Voici comment utiliser cette fonction dans ton fichier principal :

<?php
include 'data.php';

$quiz = lireQuiz("quiz.json");

// Afficher le nom du quiz
echo "<h1>" . $quiz["nom"] . "</h1>";

// Parcourir les questions
echo "<ul>";
foreach ($quiz["questions"] as $question) {
    echo "<li><strong>" . $question["question"] . "</strong><ul>";

    // Afficher les propositions pour chaque question
    foreach ($question["propositions"] as $prop) {
        echo "<li>" . $prop["texte"];
        // Indiquer si la réponse est correcte
        if ($prop["correct"]) {
            echo " <strong>(bonne réponse)</strong>";
        }
        echo "</li>";
    }
    echo "</ul></li>";
}
echo "</ul>";
?>

Pourquoi séparer la lecture des données du traitement ?

  • Améliore la lisibilité et la clarté du code.
  • Facilite la maintenance et les évolutions futures du projet.
  • Permet de réutiliser la fonction facilement dans différents contextes.
  • Rend plus simple la gestion d'erreurs et le débogage.

Bonnes pratiques

  • Vérifie toujours que ton fichier JSON est valide (outil recommandé : JSONLint).
  • Gère les erreurs potentielles (par exemple si le fichier est absent ou mal formé).
  • Sépare clairement les responsabilités (lecture des données vs traitement et affichage).

Synthèse (ce qu'il faut retenir)

  • Un fichier JSON peut facilement stocker un quiz avec ses propriétés et questions.
  • En PHP, utilise file_get_contents() pour lire un fichier et json_decode() pour transformer du JSON en tableau PHP exploitable.
  • Utilise des boucles (foreach) pour parcourir les données décodées.
  • Sépare la lecture des données dans une fonction dédiée pour faciliter la maintenance et la réutilisation.

Aller plus loin

Pour aller plus loin, tu pourrais laisser les utilisateurs choisir le quiz auquel il veut répondre. Pour ce faire, il y a 2 possibilités:

  • utiliser plusieurs fichiers json différents
  • intégrer plusieurs quiz dans un même fichier json

Pour aller plus loin