Heureusement, la gestion du JSON en PHP est extrêmement simple grâce à des fonctions natives puissantes. Dans ce tutoriel, vous allez apprendre à transformer vos données PHP en JSON, à lire du JSON pour l’utiliser dans votre code, et à éviter les pièges les plus courants lors de la création d’une API ou de la lecture de fichiers.
Encoder des données : de PHP vers JSON
L’encodage consiste à prendre des données structurées en PHP (généralement un tableau associatif ou un objet) et à les transformer en une chaîne de caractères au format JSON. C’est l’étape indispensable avant d’envoyer des données à un navigateur ou de les sauvegarder.
Pour cela, PHP met à notre disposition la fonction json_encode().
Comment encoder un tableau PHP en JSON
Imaginons que vous possédez des informations sur un utilisateur stockées dans un tableau associatif. Voici comment les préparer pour un envoi :
<?php
// Notre tableau associatif PHP
$utilisateur = [
"id" => 42,
"nom" => "Dupont",
"prenom" => "Jean",
"actif" => true,
"roles" => ["editeur", "abonne"]
];
// Encodage en JSON
$json = json_encode($utilisateur);
echo $json;
?>Le résultat affiché sera une chaîne de caractères parfaitement formatée, prête à être transmise :
{"id":42,"nom":"Dupont","prenom":"Jean","actif":true,"roles":["editeur","abonne"]}Rendre le JSON plus lisible
Si vous générez un fichier ou affichez ces données pour un humain (lors du débogage par exemple), vous pouvez utiliser l’option JSON_PRETTY_PRINT pour formater le résultat avec des sauts de ligne et des indentations.
$json_lisible = json_encode($utilisateur, JSON_PRETTY_PRINT);Décoder des données : de JSON vers PHP
Le processus inverse, le décodage, est tout aussi courant. Lorsque vous recevez des données d’une API ou lisez un fichier de configuration, elles arrivent sous forme de texte. Vous devez les transformer en variables utilisables dans votre code avec json_decode().
Comment obtenir un objet ou un tableau ?
C’est l’une des subtilités les plus importantes pour les débutants. Par défaut, json_decode() transforme les objets JSON en objets PHP (de la classe standard stdClass).
<?php
$json_recu = '{"nom": "Dupont", "age": 30}';
// Décodage par défaut (retourne un objet)
$donnees_objet = json_decode($json_recu);
echo $donnees_objet->nom; // Affiche "Dupont"
?>Cependant, en PHP, il est souvent plus pratique de travailler avec des tableaux associatifs, surtout si vous prévoyez de boucler dessus. Pour forcer ce comportement, il suffit d’ajouter true en deuxième paramètre :
<?php
// Décodage en tableau associatif grâce au paramètre true
$donnees_tableau = json_decode($json_recu, true);
echo $donnees_tableau['nom']; // Affiche "Dupont"
?>Gérer les erreurs de manipulation JSON
Il arrive fréquemment qu’une chaîne JSON entrante soit mal formatée (une virgule en trop, des guillemets manquants, un encodage incorrect). Dans ce cas, json_decode() échoue silencieusement et retourne null.
Pour comprendre ce qui s’est mal passé lors de votre manipulation JSON, vous pouvez utiliser la fonction json_last_error_msg() :
<?php
$json_invalide = '{"nom": "Dupont",}'; // La virgule à la fin est une erreur en JSON
$resultat = json_decode($json_invalide, true);
if ($resultat === null) {
echo "Erreur de décodage : " . json_last_error_msg();
// Affichera : Erreur de décodage : Syntax error
}
?>Cas pratique : JSON et API REST PHP
Le duo composé de JSON et de PHP prend tout son sens lors de la création de services web. Voici un exemple minimaliste montrant comment recevoir du JSON, le traiter, et renvoyer une réponse propre pour une API REST PHP.
1. Recevoir et lire du JSON
Dans une API REST, les données envoyées en méthode POST au format JSON ne se trouvent pas dans la variable classique $_POST. Il faut lire le corps de la requête brute via le flux d’entrée :
<?php
// Lecture du corps brut de la requête HTTP
$flux_entrant = file_get_contents('php://input');
// Décodage en tableau associatif
$donnees = json_decode($flux_entrant, true);
if ($donnees) {
$nom_recu = $donnees['nom'] ?? 'Inconnu';
// Traitement des données (ex: sauvegarde en base de données)
}
?>2. Renvoyer une réponse JSON
Pour que le client (le navigateur, Postman, ou une application mobile) comprenne qu’il reçoit du JSON et non du HTML, il est indispensable de modifier les en-têtes HTTP (headers) avant d’afficher le résultat :
<?php
// Préparation de la réponse structurée
$reponse = [
"statut" => "succès",
"message" => "Données traitées correctement"
];
// Indiquer au client que le contenu est du JSON
header('Content-Type: application/json; charset=utf-8');
// Envoi de la réponse encodée
echo json_encode($reponse);
?>En résumé
La gestion du JSON en PHP est robuste et directe. Elle repose principalement sur deux fonctions essentielles : json_encode() pour exporter vos données vers l’extérieur et json_decode() pour importer des chaînes de caractères dans vos scripts. Gardez toujours à l’esprit l’importance du paramètre true lors du décodage si vous préférez manipuler des tableaux, et pensez à vérifier les erreurs de syntaxe lorsque vous traitez des données provenant de sources externes.
