Travailler avec JSON en PHP : Guide complet d'analyse et de sérialisation
JSON (JavaScript Object Notation) est un format d'échange de données léger largement utilisé dans le développement web. PHP fournit des fonctions intégrées puissantes pour travailler avec JSON, permettant une conversion facile entre les structures PHP et les chaînes JSON. Dans cet article, nous examinerons en détail comment effectuer l'analyse (décodage) et la sérialisation (encodage) de JSON en PHP, ainsi que les erreurs typiques et les moyens de les gérer.
Qu'est-ce que JSON et pourquoi en a-t-on besoin en PHP ?
JSON est un format texte basé sur la syntaxe JavaScript. Il est utilisé pour transférer des données structurées entre un serveur et un client (par exemple, dans les API REST). En PHP, JSON est indispensable lorsque :
- Vous échangez des données avec des API externes (par exemple, services météorologiques, systèmes de paiement)
- Vous stockez des fichiers de configuration
- Vous sérialisez des données pour la mise en cache
- Vous travaillez avec des web sockets et des requêtes AJAX
PHP prend en charge le travail avec JSON depuis la version 5.2.0. Toutes les fonctions nécessaires sont intégrées au noyau — aucune extension supplémentaire n'est requise.
Sérialisation des données en JSON (json_encode)
La fonction json_encode() convertit les valeurs PHP (tableaux, objets, chaînes, nombres) en une chaîne JSON. Regardons un exemple de base :
<?php// Tableau associatif$user = [ 'name' => 'Ivan Petrov', 'age' => 28, 'email' => 'ivan@example.com', 'is_active' => true, 'hobbies' => ['programming', 'chess', 'running']];
// Encodage en JSON$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>Résultat :
{ "name": "Ivan Petrov", "age": 28, "email": "ivan@example.com", "is_active": true, "hobbies": [ "programming", "chess", "running" ]}Indicateurs importants de json_encode
JSON_UNESCAPED_UNICODE— préserve les caractères cyrilliques (sans cet indicateur, les caractères russes seront échappés sous forme de \\uXXXX)JSON_PRETTY_PRINT— formate la sortie avec des indentations pour la lisibilitéJSON_NUMERIC_CHECK— convertit les chaînes numériques en nombresJSON_FORCE_OBJECT— force la création d'un objet, même si un tableau vide est passé
Analyse de JSON en PHP (json_decode)
La fonction json_decode() effectue la transformation inverse — d'une chaîne JSON vers une valeur PHP. Par défaut, elle retourne un objet. Pour obtenir un tableau associatif, passez le second paramètre true :
<?php$jsonString = '{"name":"Ivan Petrov","age":28,"email":"ivan@example.com","is_active":true}';
// Décodage en objet$userObject = json_decode($jsonString);echo $userObject->name; // Ivan Petrov
// Décodage en tableau associatif$userArray = json_decode($jsonString, true);echo $userArray['name']; // Ivan Petrov?>Profondeur d'imbrication
Le troisième paramètre de json_decode() — depth — limite la profondeur de récursion. Par défaut, il est de 512. Cela protège contre les attaques comme "l'attaque du milliard de rires" :
<?php$deepJson = '{"a":{"b":{"c":{"d":"test"}}}}';$data = json_decode($deepJson, true, 3); // Erreur si la profondeur est supérieure à 3?>Gestion des erreurs lors du travail avec JSON
Lors de l'analyse d'un JSON invalide, json_decode() retourne null. Pour obtenir des informations détaillées sur l'erreur, utilisez json_last_error() et json_last_error_msg() :
<?php$badJson = '{"name": "Ivan", age: 28}'; // Erreur : la clé age n'est pas entre guillemets
$data = json_decode($badJson, true);
if (json_last_error() !== JSON_ERROR_NONE) {