Skip to content
jsonforge.app

JSON to PHP

Générez des classes PHP 8 avec propriétés readonly promues depuis un échantillon JSON.

Entrée JSON

Loading editor…

Code généré

Saisissez du JSON à gauche pour générer un type à partir de celui-ci.

Qu'est-ce que JSON to PHP ?

Un convertisseur JSON vers PHP transforme un échantillon de charge utile JSON en définitions de classes PHP typées. Le json_decode de PHP renvoie soit un stdClass, soit un tableau associatif, et les deux sont effectivement non typés : votre IDE ne peut pas compléter un nom de propriété, les analyseurs statiques comme PHPStan et Psalm ne peuvent rien vérifier, et une faute de frappe dans une clé ne surgit que quand la requête s'exécute. Modéliser la charge utile en vraies classes corrige les trois. La sortie générée utilise la promotion de propriétés de constructeur, qui réduit en une seule ligne par champ ce qui était autrefois une déclaration de propriété, un paramètre de constructeur et une assignation, plus readonly pour qu'une réponse décodée ne puisse pas être modifiée par accident quelque part en aval. Parce que les tableaux PHP sont des génériques non typés, les propriétés de tableau portent aussi un docblock nommant le type d'élément, qui est ce que lisent les analyseurs statiques.

Comment utiliser JSON to PHP

  1. Collez une réponse JSON représentative dans le panneau de gauche — chaque propriété promue de la classe générée provient directement des clés présentes dans cet échantillon.
  2. Définissez un nom de classe racine au-dessus de la sortie (par défaut « Root ») ; chaque objet imbriqué devient sa propre classe nommée d'après la clé qui le contient.
  3. Copiez les classes dans votre projet, puis hydratez-les depuis la sortie de json_decode — soit à la main, soit avec une bibliothèque de mapping.
  4. Utilisez le sélecteur de langue au-dessus de la sortie pour émettre la même forme en TypeScript, Go ou un autre langage pris en charge.

Exemples

Objet plat avec propriétés readonly promues

Entrée

{"id": 1, "name": "Ada", "active": true}

Sortie

<?php declare(strict_types=1); final class Root { public function __construct( public readonly int $id, public readonly string $name, public readonly bool $active, ) {} }

Une propriété de tableau porte un docblock pour l'analyse statique

Entrée

{"user": {"id": 1, "name": "Ada", "roles": ["admin"]}}

Sortie

<?php declare(strict_types=1); final class User { public function __construct( public readonly int $id, public readonly string $name, /** @var string[] */ public readonly array $roles, ) {} } final class Root { public function __construct( public readonly User $user, ) {} }

Erreurs courantes

  • Viser PHP 7.x avec cette sortie — les propriétés de constructeur promues et readonly échouent toutes deux à l'analyse là-bas, produisant une erreur de syntaxe plutôt qu'un message utile.
  • Supprimer les docblocks /** @var string[] */ jugés inutiles — ils sont la seule information de type que l'analyse statique possède sur le contenu des tableaux, donc les retirer affaiblit silencieusement toute vérification sur ces données.
  • S'attendre à ce que json_decode renvoie ces classes directement ; il renvoie des tableaux ou stdClass, et le mapping vers les types générés est une étape séparée qu'il reste à écrire ou à déléguer à une bibliothèque.

Pourquoi utiliser cet outil

  • Utilise la promotion de propriétés de constructeur, remplaçant trois lignes de code répétitif par champ par une seule.
  • Marque les propriétés readonly, donc une réponse d'API décodée ne peut pas être modifiée à la dérobée plus loin dans le cycle de vie de la requête.
  • Fonctionne entièrement côté client, donc une réponse copiée d'un endpoint Laravel ou Symfony n'atteint jamais un serveur juste pour générer ces classes.

Questions fréquentes