Travailler avec JSON en PHP : analyse et sérialisation des données

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi PHP a-t-il besoin de JSON ?

JSON (JavaScript Object Notation) est un format léger d'échange de données qui est devenu le standard de facto pour les API web, les fichiers de configuration et le stockage d'informations structurées. Malgré son origine JavaScript, JSON est parfaitement supporté dans tous les langages de programmation modernes, y compris PHP.

En PHP, le travail avec JSON est implémenté nativement via deux fonctions clés : json_encode() (sérialisation — transformation des données PHP en chaîne JSON) et json_decode() (désérialisation — analyse d'une chaîne JSON en structures PHP). Dans cet article, nous allons voir en détail comment utiliser efficacement ces outils, gérer les erreurs et appliquer JSON dans des projets réels.



1. Sérialisation des données : la fonction json_encode()

La fonction json_encode() convertit une valeur PHP (tableau, objet, chaîne, nombre) en une chaîne au format JSON. Cela est nécessaire lorsque vous souhaitez envoyer des données à un client (par exemple, via AJAX) ou les enregistrer dans un fichier.



Syntaxe de base et exemples

<?php// Tableau simple$colors = ["red", "green", "blue"];echo json_encode($colors);// Sortie : ["red","green","blue"]

// Tableau associatif$user = [ "name" => "Иван", "age" => 30, "is_admin" => false];echo json_encode($user);// Sortie : {"name":"Иван","age":30,"is_admin":false}?>


Drapeaux utiles de json_encode()

La fonction accepte un deuxième paramètre — un masque de bits de drapeaux. Voici les plus utiles :

  • JSON_PRETTY_PRINT — formate la sortie avec des indentations pour une meilleure lisibilité.
  • JSON_UNESCAPED_UNICODE — n'échappe pas les caractères cyrilliques et autres caractères Unicode (sinon les lettres russes deviennent \\uXXXX).
  • JSON_NUMERIC_CHECK — convertit les chaînes contenant des nombres en type numérique.
  • JSON_FORCE_OBJECT — force la transformation d'un tableau en objet, même pour les tableaux indexés.


<?php$data = ["name" => "Анна", "age" => "25"];

// Sans drapeauxecho json_encode($data);// {"name":"\\u0410\\u043d\\u043d\\u0430","age":"25"}

// Avec drapeauxecho json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);/*{ "name": "Анна", "age": "25"}*/?>


2. Analyse de JSON : la fonction json_decode()

La fonction json_decode() effectue l'opération inverse — elle transforme une chaîne JSON en une variable PHP. Par défaut, elle retourne un objet de la classe stdClass, mais on peut demander un tableau associatif.



Analyse en objet et en tableau

<?php$jsonString = '{"name":"Петр","age":28,"skills":["PHP","MySQL"]}';

// Par défaut — objet$obj = json_decode($jsonString);echo $obj->name; // Петрecho $obj->skills[0]; // PHP

// Avec le drapeau true — tableau associatif$arr = json_decode($jsonString, true);echo $arr["name"]; // Петрecho $arr["skills"][1]; // MySQL?>


Profondeur de récursion

Le troisième paramètre depth limite la profondeur d'imbrication. Par défaut, c'est 512 niveaux. C'est une protection contre les attaques de type "billion laughs attack" :

<?php$malicious = '{"a":{"b":{"c":"d"}}}';$result = json_decode($malicious, false, 2); // Maximum 2 niveaux// Retourne null car la profondeur est dépassée?>


3. Gestion des erreurs lors du travail avec JSON

L'un des problèmes les plus courants est une chaîne JSON incorrecte. PHP ne lève pas d'exception en cas d'erreur d'analyse, mais retourne null. Pour comprendre ce qui s'est mal passé, utilisez les fonctions json_last_error() et json_last_error_msg().



Vérification des erreurs

<?php$badJson = '{"name": "Erreur, sans guillemet}';$data = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) { echo "Erreur JSON : " . json_last_error_msg();}

Blogs

Book Recommendations