JSON a PHP
Genera clases de PHP 8 con propiedades readonly promocionadas a partir de una muestra JSON.
Entrada JSON
Código generado
Escribe JSON a la izquierda para generar un tipo a partir de él.
¿Qué es JSON a PHP?
Un conversor de JSON a PHP convierte una muestra de un payload JSON en definiciones de clases PHP tipadas. El json_decode de PHP devuelve un stdClass o un array asociativo, y ambos son en la práctica no tipados: tu IDE no puede autocompletar un nombre de propiedad, los analizadores estáticos como PHPStan y Psalm no pueden comprobar nada, y una errata en una clave solo aparece cuando la petición se ejecuta. Modelar el payload como clases reales arregla las tres cosas. La salida generada usa la promoción de propiedades en el constructor, que colapsa lo que antes era una declaración de propiedad, un parámetro de constructor y una asignación en una sola línea por campo, además de readonly para que una respuesta decodificada no pueda mutarse por accidente aguas abajo. Como los arrays de PHP son genéricos sin tipar, las propiedades de array llevan además un docblock que nombra el tipo del elemento, que es lo que leen los analizadores estáticos.
Cómo usar JSON a PHP
- Pega una respuesta JSON representativa en el panel izquierdo — cada propiedad promocionada de la clase generada proviene directamente de las claves presentes en esa muestra.
- Fija un nombre de clase raíz sobre la salida (por defecto "Root"); cada objeto anidado se convierte en su propia clase con el nombre de la clave que lo contiene.
- Copia las clases a tu proyecto y luego hidrátalas desde la salida de json_decode — ya sea a mano o con una librería de mapeo.
- Usa el selector de lenguaje sobre la salida para emitir la misma forma en TypeScript, Go u otro lenguaje soportado.
Ejemplos
Objeto plano con propiedades readonly promocionadas
Entrada
{"id": 1, "name": "Ada", "active": true}
Salida
<?php declare(strict_types=1); final class Root { public function __construct( public readonly int $id, public readonly string $name, public readonly bool $active, ) {} }
Una propiedad de array lleva un docblock para el análisis estático
Entrada
{"user": {"id": 1, "name": "Ada", "roles": ["admin"]}}
Salida
<?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, ) {} }
Errores comunes
- Usar esta salida con PHP 7.x como destino — las propiedades promocionadas y readonly no se parsean allí, produciendo un error de sintaxis en lugar de un mensaje útil.
- Borrar los docblocks /** @var string[] */ por considerarlos ruido — son la única información de tipo que el análisis estático tiene sobre el contenido de los arrays, así que eliminarlos debilita silenciosamente cada comprobación sobre esos datos.
- Esperar que json_decode devuelva estas clases directamente; devuelve arrays o stdClass, y mapear a los tipos generados es un paso aparte que aún tienes que escribir o delegar a una librería.
Por qué usar esta herramienta
- Usa promoción de propiedades en el constructor, reemplazando tres líneas de boilerplate por campo por una sola.
- Marca las propiedades como readonly, así una respuesta de API decodificada no puede mutarse sigilosamente más adelante en el ciclo de vida de la petición.
- Se ejecuta íntegramente en el cliente, así que una respuesta copiada de un endpoint Laravel o Symfony nunca llega a un servidor solo para generar estas clases.