Herramienta de Tool Kumar

JSON a clases PHP

Genera clases para PHP 8.1 o posterior con propiedades readonly tipadas y promovidas en el constructor. Cada clase tiene un método fromArray que mapea las claves JSON originales y construye los objetos anidados.

Cómo usar esta herramienta

  1. Pega una respuesta representativa que incluya registros cuyos campos difieran.
  2. Revisa la salida generada y cambia el nombre raíz si es necesario.
  3. Copia o descarga el código y comprueba después los tipos con el contrato de tu API.

Ejemplo práctico

Esta salida procede del conversor integrado. Los dos precios permiten inferir un campo de coma flotante; los valores null y de cadena de note permiten inferir un campo que admite null.

Entrada

{
  "user-id": 42,
  "profile": {
    "city": "London",
    "created_at": "2026-10-14T09:00:00Z"
  },
  "items": [
    {
      "price": 12,
      "note": null
    },
    {
      "price": 12.5,
      "note": "gift"
    }
  ]
}

Salida

<?php

declare(strict_types=1);

final class Root
{
    public function __construct(
        public readonly int $userId,
        public readonly Profile $profile,
        /** @var Item[] */
        public readonly array $items,
    ) {
    }

    public static function fromArray(array $data): self
    {
        return new self(
            userId: $data['user-id'],
            profile: Profile::fromArray($data['profile']),
            items: array_map(static fn ($x) => Item::fromArray($x), $data['items']),
        );
    }
}

final class Profile
{
    public function __construct(
        public readonly string $city,
        public readonly string $createdAt,
    ) {
    }

    public static function fromArray(array $data): self
    {
        return new self(
            city: $data['city'],
            createdAt: $data['created_at'],
        );
    }
}

final class Item
{
    public function __construct(
        public readonly float $price,
        public readonly ?string $note,
    ) {
    }

    public static function fromArray(array $data): self
    {
        return new self(
            price: $data['price'],
            note: $data['note'],
        );
    }
}

Elegir entre un array y un modelo tipado

Para obtener un array asociativo de PHP, basta con json_decode con true. Para usar los modelos generados, pasa ese array a Root::fromArray. JSON_THROW_ON_ERROR informa de las entradas mal formadas.

Si un identificador supera PHP_INT_MAX, JSON_BIGINT_AS_STRING puede conservar sus dígitos, pero debes cambiar a string la propiedad float correspondiente del código generado. Un float inferido no es un tipo exacto para identificadores.

$data = json_decode($responseBody, true, 512, JSON_THROW_ON_ERROR);
$model = Root::fromArray($data);

Opciones y casos especiales

  • La salida empieza con declare(strict_types=1) y genera clases final. Los arrays de objetos anidados incluyen los tipos de sus elementos en PHPDoc y se construyen con array_map.
  • Los valores que admiten null usan ?type; los campos que solo contienen null o mezclan tipos usan mixed. Las fechas siguen siendo string.
  • Los enteros usan int y los que superan el rango de 64 bits con signo usan float. Esto puede causar pérdida de precisión. Revisa los límites de la plataforma PHP y decodifica los identificadores grandes como cadenas cuando sea necesario.
  • No se incluye una implementación de toArray ni de JsonSerializable. Añade una serialización explícita si necesitas las claves JSON originales al codificar las clases.

Privado por defecto

Tu documento permanece en este navegador. Tool Kumar analiza, convierte y crea las descargas en tu dispositivo, sin cuenta ni pasos para subir archivos.

Preguntas sobre JSON a clases PHP

¿Puedo convertir JSON a un array asociativo de PHP?
Sí, con el propio PHP mediante json_decode($json, true, 512, JSON_THROW_ON_ERROR). Este generador produce clases de modelo tipadas en lugar de un literal de array PHP.
¿Qué versión de PHP necesita el código generado?
PHP 8.1 o posterior para las propiedades readonly promovidas en el constructor. La salida también usa propiedades tipadas, argumentos con nombre y strict_types.
¿Cómo se convierten los objetos anidados en clases?
fromArray llama al método fromArray de la clase anidada. Los arrays de objetos anidados usan array_map, con los tipos de sus elementos documentados en PHPDoc.
¿Se conservan las claves al volver a codificar como JSON?
El método fromArray conserva los mapeos de entrada. La salida no incluye un codificador personalizado, así que json_encode usa los nombres de las propiedades de estos objetos. Añade JsonSerializable o un método toArray si necesitas las claves JSON originales.

Herramientas relacionadas

JSON a Python, JSON a Java y Generador de JSON Schema.