logo
GeekFormat

JSON a PHP

Herramienta gratuita en línea de JSON a PHP, convierte JSON a clases PHP ejecutables con un clic. Admite estilos ArrayObject y stdClass, genera automáticamente namespace, propiedades tipadas (PHP 7.4+), readonly class opcional (PHP 8.1+), implementa JsonSerializable, objetos anidados se dividen automáticamente en clases independientes, arrays se convierten automáticamente a array PHP, se ejecuta localmente en el navegador sin necesidad de subida.

Relacionado

Acerca de JSON a clase PHP y modelado de clases de entidad PHP

La herramienta JSON a PHP (JSON to PHP Converter) es una herramienta práctica que convierte automáticamente estructuras de datos JSON a código de clase PHP estándar. Libera a los desarrolladores del trabajo repetitivo de escribir a mano namespace / class / propiedades public / constructor, especialmente adecuada para convertir rápidamente JSON de ejemplo en documentación de interfaz API a clases de entidad PHP que se pueden requerir directamente en proyectos Composer.

Esta herramienta admite 4 estilos de código principales: ① Estilo ArrayObject (extiende \ArrayObject, admite acceso array y objeto, común en ecosistema Laravel / Symfony Serializer); ② Estilo stdClass (extiende \stdClass, solo admite acceso objeto, comportamiento predeterminado WordPress / json_decode); ③ Estilo readonly class (final readonly class PHP 8.1+, inmutable después de construcción, adecuado para DTO); ④ Estilo integración Laravel (implementa Jsonable + Arrayable, acompaña Eloquent API Resource). Los desarrolladores pueden elegir libremente según el framework utilizado por el proyecto.

El mapeo de tipos PHP es el núcleo de JSON a PHP. La herramienta mapea tipos básicos de JSON a tipos estándar de PHP: cadenas se mapean a string, enteros a int, flotantes a float, booleanos a bool, arrays a array, objetos anidados a class independiente (con nombre de campo capitalizado), null a ?type (propiedad nullable). Todas las propiedades se declaran con typed properties de PHP 7.4+, el IDE puede realizar verificación de tipos directamente.

Otro punto destacado diferenciador es 'implementar automáticamente la interfaz JsonSerializable': cada clase PHP generada implementa automáticamente \JsonSerializable y genera el método public function jsonSerialize(): mixed { return [...] }. Esto significa que puedes usar directamente echo json_encode($user) para generar cadena JSON, y json_encode llamará automáticamente a los datos del array devueltos por jsonSerialize(). En Laravel, con la interfaz Jsonable también puedes directamente return response()->json($user), sin ningún procesamiento adicional.

A diferencia de algunas herramientas en línea que necesitan subir JSON a servidor para procesar, todos los cálculos de esta herramienta se completan en el navegador. quicktype-core se carga y ejecuta mediante Web Worker; análisis JSON, inferencia de tipos, generación de código PHP, empaquetado ZIP se realizan localmente, no envían datos a ningún servidor. Esto es especialmente importante para JSON que contiene claves API, campos de privacidad de usuario o estructuras de negocio no lanzadas, los datos se borran de la memoria al cerrar la página.

El código generado generalmente necesita colocarse en un proyecto Composer para su uso. Necesitas asegurarte en composer.json que la versión de PHP cumpla los requisitos (PHP 7.4+ admite typed properties, PHP 8.1+ admite readonly class), luego copia las clases generadas al directorio src, carga automáticamente mediante namespace (PSR-4). Después puedes usar json_decode($jsonString, false) o json_decode($jsonString, true) + deserialización para consumir datos, disfrutando de las ventajas del sistema de tipos PHP.

Casos de uso

  • Desarrollo backend Laravel: convierte rápidamente JSON de ejemplo de documentación de interfaz API a clases Eloquent Model / API Resource, serializa respuestas directamente con interfaces Jsonable / Arrayable integradas de Laravel
  • Integración Symfony Serializer: convierte JSON devuelto por API de terceros a clases PHP estilo ArrayObject, realiza mapeo de objetos profundo y validación de datos con Symfony Serializer
  • WordPress REST API: convierte estructura JSON devuelta por endpoint personalizado a clases PHP estilo stdClass, envía directamente con wp_send_json(), coincide con comportamiento predeterminado wp_json_encode()
  • DTO readonly PHP 8.1+: convierte JSON a final readonly class para objetos de transferencia de datos (DTO), inmutables después de construcción, evita que lógica de negocio modifique por error datos de respuesta
  • Desarrollo de paquetes Composer: convierte JSON Schema a clases PHP y publica en Packagist como capa de modelos SDK, para que otros proyectos Composer lo requieran y reutilicen
  • Fixtures de pruebas unitarias: convierte fixtures JSON a clases PHP y realiza pruebas basadas en datos con json_decode + deserialización, afirma campos estructurados
  • Scripts de migración de datos: convierte archivos de configuración JSON a clases PHP para acceso fuertemente tipado en lógica de negocio, más fácil autocompletado IDE y verificación de tipos que acceso array
  • Integración Mock frontend: backend convierte primero modelos JSON a clases PHP, frontend obtiene al mismo tiempo la interfaz TypeScript / clase PHP correspondiente, mantiene coherencia de tipos entre ambos extremos
  • Revisión de código: convierte directamente JSON devuelto por API a clases PHP legibles, facilita discutir nomenclatura de campos, visibilidad de propiedades durante Code Review
  • Refactorización de proyectos antiguos: refactoriza código de acceso dinámico basado en array asociativo a acceso fuertemente tipado basado en clase PHP, realiza análisis estático con PHPStan / Psalm
  • Proveedor de datos PHPUnit: convierte datos de prueba JSON a clases PHP y los inyecta en casos de prueba mediante DataProvider, el IDE sugiere automáticamente campos de propiedad
  • Integración de API backend snake_case: API backend devuelve campos snake_case, el sistema PHP frontend activa estilo 'Convertir a camelCase' + ArrayObject para integración perfecta
  • Análisis estático PHPStan: las clases generadas tienen naturalmente declaraciones de tipos, se puede usar phpstan analyse ./src --level=8 para interceptar errores de tipos en CI
  • Enseñanza y capacitación: en escenarios de enseñanza PHP, convierte JSON de ejemplo a clases PHP para demostrar modelado orientado a objetos, sistema de tipos, implementación de interfaces
  • Capa de puerta de enlace API Gateway: convierte JSON devuelto por microservicios ascendentes a clases PHP para agregación en capa de puerta de enlace, servicios PHP descendientes consumen fuertemente tipados por propiedades de clase
  • Consumo de colas de mensajes: convierte cuerpos de mensajes JSON consumidos de RabbitMQ / Kafka a clases PHP para almacenar o reenviar, realiza análisis estricto con JSON_THROW_ON_ERROR
  • Modelado SKU / SPU de comercio electrónico: convierte estructura JSON de productos (múltiples especificaciones / múltiples imágenes / múltiples atributos) a clases PHP, acompaña estilo ArrayObject para optimización de consultas N+1 en Laravel
  • Verificación de firma WebHook: convierte estructura de verificación de firma JSON de devoluciones de llamadas de pasarelas de pago, logística a clases PHP, realiza verificación de firma con hash_hmac()
  • Cadena de herramientas OpenAPI: convierte schema JSON de OpenAPI 3.x a clases PHP, se conecta al flujo de generación de cliente PHP de Swagger Codegen / Apifox
  • Tubería ETL de datos: convierte JSON de fuentes de datos ascendentes (campos JSON MySQL / MongoDB / Elasticsearch) a clases PHP y luego realiza limpieza de datos y almacenamiento

Cómo Usar

  1. Pega un objeto JSON (recomendado) o array en el editor izquierdo, o haz clic en 'Sample' para cargar ejemplo en chino (con address / company / tags anidados)
  2. Haz clic en el botón 'Settings' en la barra de herramientas, selecciona en el popup: ① establece nombre de clase raíz (como User) y namespace (como App\Models); ② selecciona estilo de código (ArrayObject / stdClass / readonly class); ③ selecciona estilo de código (propiedades tipadas / integración Laravel / Symfony Serializer); ④ selecciona estrategia de nomenclatura de campos (mantener original / camelCase / todo minúsculas / UPPER_SNAKE)
  3. La herramienta se convertirá automáticamente en 400 ms, a la derecha se muestran todas las clases PHP generadas (cada clase una tarjeta independiente, la barra de título muestra insignia de estilo actual en tiempo real); si JSON tiene errores de formato se mostrará botón 'Reparar JSON'
  4. Verifica que los nombres de clase, nombres de propiedad e interfaces generados cumplan las expectativas; si necesitas ajustes puedes modificar nombres de clave del JSON fuente o volver a abrir Settings para modificar opciones
  5. Después de estar satisfecho, puedes hacer clic en el botón 'Copiar' de una clase individual para pegar en IDE, o hacer clic en 'Download ZIP' en la barra de herramientas para descargar todas las clases con un clic (organizadas por ruta namespace en estructura de directorios)

Características

  • Dos estilos de código conmutables libremente: ArrayObject (extiende \ArrayObject, admite acceso tipo array $obj['key']) / stdClass (extiende \stdClass, admite acceso tipo objeto $obj->key), compatible con serialización Laravel, WordPress REST, Symfony Serializer y otros escenarios
  • Plantilla PHP completa: genera automáticamente declaración namespace + sentencias use + comentario de encabezado de clase (Copyright + marca de tiempo de generación) + definición de clase + propiedades públicas tipadas (PHP 7.4+), se puede requerir directamente en proyecto Composer sin código repetitivo manual
  • Interfaz JsonSerializable implementada automáticamente: cada clase genera automáticamente public function jsonSerialize(): mixed { return [...] }, serializa JSON directamente con json_encode(), cero código repetitivo adicional
  • Clase readonly PHP 8.1+ opcional: al activarse, la clase generada añade final readonly class, todas las propiedades son readonly, inmutables después de la construcción, adecuada para escenarios DTO de respuesta API inmutables
  • Inferencia de tipos inteligente: string → string, integer → int, float → float, bool → bool, array → array, objetos anidados → clase independiente, null → ?type (propiedad nullable), no se necesita especificación manual de tipos de campo
  • Clases anidadas divididas automáticamente: objetos anidados generan clases PHP independientes con nombres de campo capitalizados (ej. address → Address), objetos en arrays nombrados por regla 'eliminar s final' (ej. users → User), todas las clases anidadas también implementan JsonSerializable
  • 4 estrategias de nomenclatura de campos: mantener original / snake_case a camelCase (user_name → userName) / todo minúsculas / estilo constante UPPER_SNAKE, coincidiendo con convenciones de código PSR-1 / Laravel / Symfony
  • Integración Laravel con un clic: al marcar, implementa automáticamente interfaces Jsonable, Arrayable, añade métodos toArray() / toJson(), se puede usar directamente como Eloquent API Resource con carga automática Composer
  • Copiar clase individual + descarga multiarchivo ZIP: cada clase PHP tiene botón 'Copiar' independiente, descarga con un clic de paquete ZIP organizado por estructura de directorios namespace (ej. App/Models/User.php), descomprime y usa
  • Ejecución local en navegador + historial: análisis JSON, generación de clases PHP, empaquetado ZIP todo completado en el navegador mediante JavaScript (quicktype-core + JSZip), datos no subidos a ningún servidor; historial localStorage integrado para últimas 200 entradas

Ejemplos de Código

PHP: serializa clases generadas por esta herramienta con json_encode()

php

Las clases PHP generadas por esta herramienta implementan por defecto la interfaz JsonSerializable, acompañan json_encode() para generar JSON directamente sin ningún procesamiento adicional.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// 模拟从 API 接收到的 JSON 字符串
$jsonString = '{"id":1,"name":"Alice","email":"alice@example.com","isActive":true}';

// 1) 反序列化为本工具生成的类
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) 强类型访问字段(IDE 自动补全 + PHPStan 静态检查)
echo $user->name;          // Alice
echo $user->email;         // a****@***********
echo $user->isActive ? '活跃' : '禁用'; // 活跃

// 3) json_encode() 自动调用 jsonSerialize(),无需任何额外代码
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "alice@example.com",
    "isActive": true
}
*/

PHP: ejemplo de integración Laravel API Resource

php

Después de marcar integración Laravel, las clases generadas por esta herramienta se pueden usar directamente como Eloquent API Resource, acompañan toArray() / toJson() para formatear respuestas.

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * GET /api/users/{id}
     */
    public function show(int $id): JsonResponse
    {
        // 1) 从数据库或外部 API 获取数据
        $userData = $this->fetchUserFromApi($id);

        // 2) 用本工具生成的 User 类包装
        $user = new User(
            $userData['id'],
            $userData['name'],
            $userData['email'],
            $userData['isActive']
        );

        // 3) 直接 return response()->json($user)
        //    Laravel 会自动调用 jsonSerialize()
        return response()->json($user);
    }

    /**
     * POST /api/users
     */
    public function store(Request $request): JsonResponse
    {
        // 4) 反向用法:把请求 JSON 反序列化为 User 类
        $user = User::fromArray($request->all());

        // 5) 用 toArray() 获取数组形式
        $payload = $user->toArray();

        // 6) 执行业务逻辑(如入库 / 调用第三方 API)
        $this->userService->create($payload);

        return response()->json([
            'message' => 'User created',
            'data' => $user,
        ], 201);
    }
}

/*
 * 对应 composer.json 依赖:
 * "require": {
 *     "php": "^8.1",
 *     "laravel/framework": "^11.0"
 * }
 */

PHP: ejemplo de integración Symfony Serializer

php

Las clases generadas en estilo ArrayObject por esta herramienta pueden acompañar el componente Symfony Serializer para serialización y deserialización profunda, adecuadas para capas complejas de puerta de enlace API.

<?php

namespace App\Service;

use App\Models\User;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;

class UserSerializer
{
    private SerializerInterface $serializer;

    public function __construct(SerializerInterface $serializer)
    {
        // 使用 PropertyNormalizer 处理 public 属性
        $this->serializer = $serializer;
    }

    /**
     * 将 User 对象序列化为 JSON 字符串
     */
    public function toJson(User $user): string
    {
        return $this->serializer->serialize($user, 'json');
    }

    /**
     * 将 JSON 字符串反序列化为 User 对象
     */
    public function fromJson(string $json): User
    {
        return $this->serializer->deserialize($json, User::class, 'json');
    }

    /**
     * 批量反序列化(如从 MongoDB 导出的 JSON 数组)
     */
    public function fromJsonArray(string $jsonArray): array
    {
        $users = [];
        $data = json_decode($jsonArray, true);

        foreach ($data as $item) {
            $users[] = User::fromArray($item);
        }

        return $users;
    }
}

// 使用示例
$serializer = new UserSerializer($serializerService);

$json = '{"id":1,"name":"Alice","address":{"city":"Beijing","zip":"100000"},"tags":["php","symfony"]}';

// 反序列化为本工具生成的 User 对象
$user = $serializer->fromJson($json);
echo $user->name;                  // Alice
echo $user->address->city;         // Beijing (强类型访问)
print_r($user->tags);              // ['php', 'symfony']

// 序列化回 JSON
$jsonOutput = $serializer->toJson($user);

Best Practices

Para la mayoría de proyectos backend PHP, las clases generadas en estilo ArrayObject pueden accederse tanto como array ($obj['key']) como objeto ($obj->key), además de la interfaz JsonSerializable implementada por defecto, json_encode() llamará automáticamente al array devuelto por jsonSerialize(). Esta es la escritura de portador de datos de objeto más universal en el ecosistema PHP, compatible con casi todos los frameworks principales como Laravel, Symfony, CodeIgniter.

La clase readonly introducida en PHP 8.1+ es la mejor práctica para DTO: las propiedades son inmutables después de construcción, evita que lógica de negocio modifique por error datos de respuesta; la promoción de constructor hace que el código sea más conciso (public function __construct(public int $id, public string $name) {} declara propiedades en una línea). Se recomienda cambiar DTO de respuesta API, estructura de devolución de llamada WebHook, modelo de cliente API de terceros a estilo readonly class.

Los campos de base de datos Laravel son por defecto snake_case, pero las propiedades PHP recomiendan camelCase. La estrategia 'Convertir a camelCase' de esta herramienta puede convertir automáticamente, mientras que la clave del array return de jsonSerialize() conserva snake_case original, json_encode() sigue generando snake_case. Esto cumple con el hábito de acceso a modelos Laravel y mantiene compatibilidad API.

El paquete ZIP generado se organiza por ruta namespace (como App/Models/User.php). Configura la sección autoload.psr-4 en composer.json, por ejemplo: "App\\": "src/", luego ejecuta composer dump-autoload. Así Composer mapeará automáticamente App\Models\User a src/Models/User.php, sin necesidad de require manual.

Esta herramienta genera por defecto propiedades tipadas (PHP 7.4+), que pueden ser completamente inferidas por PHPStan en modo --level=8. Se recomienda integrar phpstan analyse ./src --level=8 en la tubería CI para interceptar errores de tipos. Psalm también admite PropertyTypeProvider para verificación de tipos fuerte.

Esta herramienta se ejecuta completamente local en el navegador, no sube ningún dato. Pero forma el hábito: ① JSON que contiene claves API / token / privacidad de usuario debe desensibilizarse antes de convertir; ② al usar esta herramienta para estructuras de negocio internas grandes (interfaces no lanzadas), asegúrate de que la red esté desconectada; ③ no hagas commit de datos de ejemplo con información sensible en repositorios públicos después de generar código.

Los objetos JSON anidados generan clases PHP independientes recursivamente. Si el nivel de anidamiento JSON supera las 6 capas (como menús anidados de múltiples capas, árboles de estructura organizativa, documentos de negocio complejos), la cantidad de clases generadas explotará (N clases anidadas por cada capa), el IDE se carga lentamente y es difícil de mantener. Sugerencias: ① divide JSON en varios módulos y convierte por separado; ② o después de generar refactoriza manualmente a índice de array ($user['profile']['address']['city']) en lugar de anidamiento de clases.

Los valores null JSON se inferirán por defecto como ?mixed (mixed nullable), que es un fallback seguro pero no un tipo preciso. Si conoces el tipo de campo (como "nickname": "" infiere string), da primero un valor de ejemplo en el JSON fuente, después de generar elimina el valor de ejemplo y cambia a tipo preciso como ?string, lo que puede mejorar significativamente la precisión del análisis estático PHPStan.

Preguntas Frecuentes

¿Cómo convertir JSON a clase PHP?

Pega el contenido JSON en el cuadro de entrada izquierdo; la herramienta se convertirá automáticamente en 400 ms; o haz clic en el botón 'Convert' en la barra de herramientas. Después de la conversión, todas las clases PHP generadas se muestran a la derecha; cada clase tiene botón 'Copiar' independiente; haz clic en 'Download ZIP' en la barra de herramientas para empaquetar y descargar todas las clases (con estructura de directorios namespace).

¿Qué estructuras de datos JSON se admiten?

Se admiten dos estructuras: ① objeto JSON (como clase raíz, genera automáticamente clase RootClass); ② array JSON (primer objeto en array como plantilla de clase raíz). Todos los objetos anidados se procesan recursivamente en clases independientes; los objetos en arrays se procesan recursivamente en clases correspondientes al tipo de elemento de array.

¿Qué contenido contienen las clases PHP generadas?

Cada archivo .php generado contiene: ① comentario de encabezado de archivo (Copyright + marca de tiempo generada automáticamente); ② declaración namespace; ③ sentencias use (importa automáticamente \JsonSerializable / \ArrayAccess según sea necesario); ④ definición de clase (ArrayObject / stdClass / readonly class según configuración); ⑤ interfaces implementadas (JsonSerializable / Jsonable / Arrayable según configuración); ⑥ propiedades públicas tipadas (PHP 7.4+); ⑦ constructor (asignación completa de propiedades según configuración); ⑧ métodos como jsonSerialize() / toArray() / toJson(). Completos y listos para verificación de sintaxis php -l y uso require.

¿Cuál es la diferencia entre estilos ArrayObject y stdClass?

Estilo ArrayObject: la clase generada extiende \ArrayObject, admite tanto acceso array $obj['key'] como acceso objeto $obj->key, devuelve objeto durante json_encode(). Estilo stdClass: la clase generada extiende \stdClass, solo admite acceso objeto $obj->key, más ligera pero sin acceso array directo. El ecosistema Laravel / WordPress usa estilo stdClass por defecto (comportamiento predeterminado json_decode), Symfony Serializer usa estilo ArrayObject por defecto.

¿Admite generación de Laravel API Resource?

Sí. Después de marcar la opción 'Integración Laravel con un clic' en la configuración, la herramienta genera automáticamente implementación de interfaces Jsonable, Arrayable, añade métodos toJson($options = 0) y toArray(); las clases generadas se pueden usar directamente en Eloquent API Resource (como new UserResource($user) o $user->toArray()). También usa automáticamente Illuminate\Contracts\Support\Jsonable e Illuminate\Contracts\Support\Arrayable.

¿Cómo es el código generado con modo readonly class PHP 8.1?

Al activar readonly class, las clases PHP generadas se simplifican significativamente. Por ejemplo, la clase User con readonly activado tiene aproximadamente 12 líneas: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Todas las propiedades se declaran como readonly mediante promoción de propiedades de constructor, inmutables después de la construcción. Nota: el proyecto requiere PHP 8.1+, los campos readonly solo se pueden asignar mediante constructor.

¿Cómo convertir nombres de campo snake_case a camelCase?

En el grupo 'Estrategia de nomenclatura de campos' del popup Settings, selecciona el modo 'Convertir a camelCase'; la herramienta convierte automáticamente los nombres de campo JSON de snake_case al estilo de nomenclatura recomendado por PHP. Ej. user_name → userName, created_at → createdAt, is_active → isActive. Además, si JSON proviene de enlace de ruta Laravel, las propiedades de clase se pueden acceder directamente mediante $request->userName sin conversión intermedia manual.

¿Cómo se manejan los objetos JSON anidados?

La herramienta crea automáticamente clases PHP independientes para objetos anidados. Reglas de nomenclatura: clave de objeto anidado capitalizada como nombre de clase (ej. address → Address), clave de objeto en arrays con s final eliminada y luego capitalizada (ej. users → User). Todas las clases anidadas también incluyen campos completos, constructor, método jsonSerialize(), namespace consistente con clase raíz, se pueden importar mediante use App\Models\Address.

¿A qué se convierten automáticamente los campos array?

Sí. Los campos array en JSON se convierten automáticamente a propiedades array PHP; el tipo de elemento se infiere automáticamente del primer elemento. Ej. ["a","b","c"] → array (anotado array<string> en comentario); [{...},{...}] → array (anotado array<User> en comentario, User es nueva clase nombrada desde clave); array vacío [] por defecto array (anotado array<mixed> en comentario). PHP 8.0+ con anotaciones PHPDoc brinda sugerencias de tipo en IDE.

¿Cómo modificar el nombre de clase raíz y namespace?

Botón Settings en la esquina superior derecha de la barra de herramientas; haz clic para abrir diálogo de configuración, puedes establecer: ① nombre de clase raíz (predeterminado JsonRootClass); ② namespace (predeterminado App\Models). Después de la modificación, todos los nombres de clase generados se actualizan sincrónicamente; la estructura de directorios ZIP también se organiza por namespace (ej. App/Models/User.php).

¿La descarga es un solo archivo .php o paquete ZIP?

La descarga es paquete ZIP (User.zip), que contiene todas las clases PHP generadas organizadas por ruta namespace. Ej. cuando namespace es App\Models, estructura de archivos dentro de ZIP: App/Models/User.php, App/Models/Address.php, App/Models/Company.php, etc. Se puede importar directamente al directorio src de proyecto Composer mediante comando unzip o IDE.

¿Se puede copiar una clase individual directamente al IDE?

Sí. Cada clase PHP generada se muestra como una tarjeta independiente, con botón 'Copiar' en la esquina superior derecha de la tarjeta; al hacer clic, el código completo de toda la clase (incluyendo <?php + namespace + use + clase + propiedades + constructor + métodos) se copia al portapapeles, se puede pegar directamente en IDE como PhpStorm / VS Code / Sublime.

¿Cómo hacer que las clases generadas implementen la interfaz JsonSerializable?

Está activado por defecto. Todas las clases PHP generadas implementan automáticamente \JsonSerializable y generan el método public function jsonSerialize(): array { return [...] }; puedes usar directamente echo json_encode($user) para generar cadena JSON, o en Laravel return response()->json($user).

¿Symfony Serializer puede usar las clases generadas por esta herramienta?

Sí. Symfony Serializer usa por defecto estilo array para leer datos, tiene buena compatibilidad con clases generadas en estilo ArrayObject. Con $serializer->serialize($user, 'json') de SerializerInterface se puede serializar directamente; al deserializar con deserialize(), la clase necesita propiedades públicas o getter. Esta herramienta genera estilo de propiedades públicas + asignación por constructor, se puede usar directamente con PropertyNormalizer de Symfony Serializer.

¿Qué hacer si JSON tiene errores de formato?

La herramienta detecta automáticamente la validez JSON; en caso de error, muestra aviso de error rojo a la derecha y proporciona botón 'Reparar JSON'. Al hacer clic, puede reparar automáticamente errores comunes: ① coma sobrante al final; ② comillas simples reemplazadas por comillas dobles; ③ completar comillas para claves sin comillas; ④ eliminar comentarios. Después de reparación exitosa, se puede convertir directamente para generar clases PHP.

¿Los datos se suben al servidor? ¿Es privado y seguro?

Ejecución completamente local en navegador. Todo el análisis JSON, generación de clases PHP, empaquetado ZIP se completan en tu navegador mediante JavaScript (quicktype-core + JSZip); los datos JSON de entrada y el código PHP generado no se suben a ningún servidor, ni se registran o almacenan en caché en la nube. JSON sensible que contiene campos de interfaz interna, estructuras de negocio no lanzadas, respuestas API no públicas se puede usar con confianza, se borra al cerrar la página.

¿Un JSON grande de 10,000 líneas se ralentizará?

La herramienta no tiene límite de líneas explícito, pero el análisis y renderizado de JSON muy grande por el navegador se ralentiza. Sugerencias: ① divide JSON y convierte por lotes; ② enfócate en un nivel de anidamiento a la vez; ③ si necesitas generar por lotes 100+ clases, se recomienda usar directamente complemento de plantilla PHP del IDE o escribir un script CLI quicktype simple.

¿Las clases PHP generadas admiten versiones anteriores a PHP 7.4?

No completamente. Las clases generadas por esta herramienta usan por defecto propiedades tipadas de PHP 7.4+ (como public int $id). Si tu proyecto aún es PHP 7.0~7.3, se producirá error por declaración de tipos después de la generación. Sugerencias: ① actualiza el proyecto a PHP 8.1+ (recomendado, mejor rendimiento y sistema de tipos); ② o elimina por lotes declaraciones de tipos en IDE después de generar (Buscar y reemplazar `public int ` → `public `); ③ o usa modo compatible PHP 7.4 (esta herramienta tiene PHP 7.4 como límite inferior por defecto).

Solución de problemas

Aviso 'Por favor ingrese datos JSON' o lado derecho vacío

El cuadro de entrada izquierdo está vacío o solo contiene espacios en blanco. Asegúrate de haber pegado contenido JSON válido, o haz clic en 'Sample' para cargar ejemplo en chino, o haz clic en 'Upload' para seleccionar archivos .json / .txt.

Aviso 'Unexpected token ... in JSON at position N'

El formato JSON no es válido. Causas comunes: ① coma sobrante al final (como {"a":1,}); ② se usaron comillas simples en lugar de comillas dobles; ③ escritura de objeto JS (como {key: value}) en lugar de JSON (como {"key": "value"}). Haz clic en el botón 'Reparar JSON' para reparar automáticamente algunos errores.

Código generado informa error 'Typed property must not be accessed before initialization' en proyecto PHP 7.x

Las clases generadas por esta herramienta usan por defecto typed properties de PHP 7.4+ (como public int $id). Si tu proyecto aún es PHP 7.0~7.3, la declaración de tipos causará problemas de compatibilidad. Soluciones: ① actualiza el proyecto a PHP 8.1+ (recomendado, mejor rendimiento y sistema de tipos); ② elimina por lotes declaraciones de tipos en IDE (Buscar y reemplazar `public int ` → `public `); ③ desmarca la opción 'Propiedades tipadas PHP 7.4' (solo tiene efecto para algunos estilos de código).

Clase readonly PHP 8.1 informa error 'Cannot modify readonly property'

Las propiedades generadas en estilo readonly class no se pueden modificar después de construcción. Si intentas $user->name = 'Bob' se producirá error. Soluciones: ① cambia a estilo ArrayObject o stdClass (propiedades modificables); ② o vuelve a crear una nueva instancia con new User(...) en lugar de modificar.

No se encuentra Illuminate\Contracts\Support\Jsonable en proyecto Laravel

El estilo de integración Laravel necesita dependencia laravel/framework. Asegúrate en composer.json de tener: "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Luego ejecuta composer update para instalar dependencias. Si no usas Laravel, cambia a estilo ArrayObject o stdClass.

Deserialización Symfony Serializer falla 'Cannot denormalize object'

Causas comunes: ① la clase generada no tiene propiedades públicas o métodos getter (Symfony Serializer usa PropertyNormalizer por defecto); ② la clase carece de constructor sin parámetros pero tiene parámetros obligatorios. Soluciones: ① confirma que esta herramienta ha generado propiedades públicas; ② usa el método estático fromArray() para construir manualmente el objeto antes de pasarlo a Serializer.

Nombre de clase de objeto anidado no es el que quiero (como categories se nombra Categori)

La herramienta usa regla de nomenclatura 'eliminar s final + capitalizar' para objetos en arrays; no es amigable con plurales irregulares como categories. Sugerencias: ① cambia la clave del JSON fuente a singular (como categories → category); ② o después de generar usa la función Renombrar del IDE para renombrar la clase (modifica todas las referencias simultáneamente).

Después de descomprimir ZIP descargado, estructura de directorios incorrecta

Los directorios dentro de ZIP se organizan según configuración namespace (predeterminado App/Models/). Si la ubicación después de descomprimir es incorrecta, puedes: ① modificar el nombre namespace (como cambiar a App\Dto) y volver a descargar; ② usa unzip -d src/ para especificar directorio de descompresión; ③ o directamente en IDE Archivo → Abrir toda la carpeta descomprimida.

Clase generada no se carga automáticamente

Los proyectos Composer necesitan configurar mapeo de carga automática PSR-4 en composer.json, por ejemplo: "autoload": { "psr-4": { "App\\": "src/" } }. Luego ejecuta composer dump-autoload, Composer cargará automáticamente archivos de clase según mapeo de namespace a directorio.

Después de convertir snake_case a camelCase, el nombre de campo de acceso cambió

'Convertir a camelCase' cambiará el nombre de propiedad PHP (como user_name → userName), pero la clave del array return del método jsonSerialize() sigue siendo snake_case original, el JSON generado por json_encode() sigue siendo nombre de campo original. Así que para acceder a propiedad PHP usa $user->userName, la salida JSON sigue siendo {"user_name": "..."}. Si también deseas acceder en camelCase durante la deserialización, necesitas cambiar la clave a camelCase en el array return de jsonSerialize().

Página se ralentiza al generar 100+ clases anidadas

La herramienta no tiene límite explícito de número de clases, pero el rendimiento de renderizado DOM muy grande del navegador disminuye significativamente. Sugerencias: ① divide JSON en varios módulos independientes y convierte por separado; ② o usa directamente la herramienta de generación de código integrada del IDE (como complemento JSON to PHP de PhpStorm); ③ se recomienda que el nivel de anidamiento no supere 6 capas, de lo contrario se recomienda refactorizar estructura JSON.

El array es de tipo numérico pero genera array<int> cuando en realidad es array<float>

La herramienta infiere el tipo según el primer elemento del array (como [1, 2, 3] infiere int, [1.5, 2.5] infiere float). Si mezclas enteros y flotantes (como [1, 2.5]), la herramienta inferirá según el primer elemento. Solución: ① agrega al menos un elemento flotante de ejemplo en el JSON fuente (como [0.0, 1.5]); ② o ajusta manualmente el tipo en la anotación PHPDoc después de generar.

Campo de valor null se genera como tipo ?mixed en lugar de ?string

El valor null JSON se inferirá por defecto como tipo ?mixed por la herramienta (porque no se puede determinar el tipo real). Esta es una práctica segura para evitar juicios erróneos. Si conoces el tipo, puedes dar un valor de ejemplo a ese campo en el JSON fuente (como "field": "" infiere string), después de generar cambia el tipo a ?string.

Después de composer dump-autoload la clase aún no se carga automáticamente

Posibles causas: ① namespace no coincide con directorio (como namespace App\Models pero el archivo está en src/Dto/); ② el mapeo psr-4 de composer.json está mal escrito (como "App\\": "src/Dto/" debería ser "App\\Dto\\": "src/Dto/"). Solución: verifica que el namespace de cada archivo .php corresponda estrictamente a la ruta del directorio (el segmento namespace debe ser igual al segmento de directorio, distingue mayúsculas y minúsculas).

PHPStan avisa 'Property does not have default value'

Las propiedades tipadas generadas no tienen valor predeterminado, PHPStan en modo --level=8 considera que podrían no inicializarse. Soluciones: ① desactiva strict rules de PHPStan; ② asigna valor vacío en el constructor (como $this->tags = []); ③ usa estilo readonly class (la promoción de constructor asigna inmediatamente).

Deserialización Symfony Serializer de array de objetos falla

Para arrays de objetos como [{...},{...}], PropertyNormalizer necesita sugerencia de tipo de elemento. Soluciones: ① especifica tipo array<User> en PHPDoc; ② o usa envoltorio ArrayCollection ($users = new ArrayCollection()).

Clave china genera nombre de propiedad PHP con caracteres especiales

Cuando el JSON fuente contiene claves chinas (como "姓名": "Alice"), la herramienta generará propiedad public string $姓名, el IDE puede avisar que la nomenclatura no es estándar pero no informará error. Sugerencias: ① cambia claves JSON a inglés (más cumple con la convención de nomenclatura PSR-1 de PHP); ② al conservar chino asegúrate que la codificación del archivo PHP sea UTF-8 (PHP es UTF-8 por defecto).

En estilo ArrayObject, $obj['key'] y $obj->key devuelven orden inconsistente

El acceso array en estilo ArrayObject devuelve en orden de declaración de propiedad, el acceso objeto devuelve en orden del array return en el método jsonSerialize(). Si ambos órdenes son inconsistentes, la salida de echo json_encode() será inconsistente con var_dump($obj). Sugerencia: mantén el orden return de jsonSerialize() consistente con el orden de parámetros del constructor.

ID numérico en JSON de devolución de llamada WebHook excede PHP_INT_MAX

El int de PHP en sistemas de 64 bits es un entero con signo de 64 bits (valor máximo 9223372036854775807); si el ID numérico en JSON excede este rango (como ID de copo de nieve de Twitter), se truncará. Soluciones: ① recibe ID con tipo cadena ("id": "1234567890123456789"); ② analiza con indicador JSON_BIGINT_AS_STRING.

Glosario

namespace
Mecanismo de espacios de nombres introducido en PHP 5.3+, evita conflictos de nombres de clase. Esta herramienta genera automáticamente según el namespace establecido por el usuario y organiza en ZIP por directorio App/Models/.
class
Plantilla para definir objetos en PHP. Esta herramienta genera clases PHP estándar que se pueden instanciar directamente con new User(...).
ArrayObject
Clase en la biblioteca estándar SPL de PHP, implementa interfaces como ArrayAccess. Las clases generadas en estilo ArrayObject de esta herramienta heredan de \ArrayObject, admiten acceso dual tipo array y tipo objeto.
stdClass
Clase de objeto genérico integrada de PHP, json_decode($json, false) devuelve este tipo por defecto. Las clases generadas en estilo stdClass de esta herramienta heredan de \stdClass, solo admiten acceso tipo objeto.
typed properties
Declaración de tipos de propiedades introducida en PHP 7.4+ (como public int $id). Las propiedades generadas por esta herramienta tienen declaraciones de tipos por defecto, IDE y herramientas de análisis estático pueden realizar verificación de tipos directamente.
readonly class
Clase de solo lectura introducida en PHP 8.1+, todas las propiedades dentro de la clase son automáticamente readonly, no modificables después de construcción. El estilo readonly de esta herramienta genera final readonly class, adecuado para escenarios DTO inmutables.
JsonSerializable
Interfaz introducida en PHP 5.4+, los objetos que implementan esta interfaz llamarán automáticamente al método jsonSerialize() al ser procesados por json_encode(). Todas las clases de esta herramienta implementan automáticamente esta interfaz.
Jsonable (Laravel)
Interfaz de contrato del framework Laravel, después de implementarla el objeto puede llamar a toJson() para generar JSON. El estilo de integración Laravel de esta herramienta implementa automáticamente esta interfaz.
Arrayable (Laravel)
Interfaz de contrato del framework Laravel, después de implementarla el objeto puede llamar a toArray() para generar array. El estilo de integración Laravel de esta herramienta implementa automáticamente esta interfaz.
Composer
Herramienta oficial de gestión de dependencias de PHP. Al usar código generado por esta herramienta, necesitas configurar carga automática PSR-4 en composer.json (como App\\: src/).
PSR-4
Especificación de carga automática formulada por PHP-FIG, carga archivos de clase según mapeo de espacio de nombres a directorio. El paquete ZIP generado por esta herramienta se organiza por ruta namespace, cumple con la especificación PSR-4.
Symfony Serializer
Framework de serialización del componente Symfony. Las clases generadas en estilo ArrayObject de esta herramienta pueden acompañar PropertyNormalizer de Symfony Serializer para serialización y deserialización profunda.
Eloquent API Resource
Clase de recursos API de Laravel Eloquent, para formatear respuestas API. Las clases generadas en estilo integración Laravel de esta herramienta se pueden usar directamente como clase base de API Resource.
composer.json
Archivo de configuración de proyecto Composer. Después de colocar el código generado por esta herramienta en el directorio src, necesitas configurar la sección autoload en composer.json y ejecutar composer dump-autoload.
json_encode / json_decode
Funciones integradas de PHP para serialización y deserialización JSON. Después de que las clases generadas por esta herramienta implementen JsonSerializable, json_encode() llamará automáticamente al método jsonSerialize().
PHPUnit DataProvider
Mecanismo de proveedor de datos del framework de pruebas PHPUnit. Las clases PHP generadas por esta herramienta se pueden inyectar como DataProvider en casos de prueba, acompañando autocompletado IDE para mejorar eficiencia de escritura de pruebas.
PHPStan
Herramienta de análisis estático de PHP, puede realizar verificación de tipos, detección de errores en código. Debido a que las clases generadas por esta herramienta tienen typed properties, PHPStan puede inferir completamente tipos de propiedades en modo --level=8.
Psalm
Otra herramienta de análisis estático PHP, de código abierto por Vimeo. Las clases generadas por esta herramienta acompañando PropertyTypeProvider de Psalm pueden realizar verificación de tipos fuerte.
Doctrine
Conjunto de herramientas ORM y DBAL del ecosistema PHP. Las clases PHP generadas por esta herramienta pueden usarse como esqueleto de Doctrine Entity, luego añadir manualmente anotaciones como #[ORM\Column].
php -l
Instrucción de verificación de sintaxis de línea de comandos PHP. Las clases generadas por esta herramienta pueden ejecutar primero php -l User.php para verificación de sintaxis, luego requerir en el proyecto.
Composer dump-autoload
Comando de Composer para regenerar índice de carga automática. Después de colocar las clases generadas por esta herramienta en el directorio src, se debe ejecutar composer dump-autoload para que PSR-4 las reconozca para carga automática.
JSON_THROW_ON_ERROR
Indicador de manejo de errores de json_decode() en PHP 7.3+, al activarse un análisis JSON fallido lanzará excepción JsonException. El ejemplo Laravel de esta herramienta usa análisis estricto.
Hash (PHP)
Función hash integrada de PHP, comúnmente usada para verificación de firma WebHook. Las clases de devolución de llamada WebHook generadas por esta herramienta acompañan hash_hmac() para verificación de firma.

Tabla de referencia rápida de mapeo de tipos JSON a tipos PHP

Esta herramienta infiere automáticamente el tipo PHP correspondiente según el tipo de valor JSON; las relaciones de mapeo comunes son las siguientes:

Ejemplo de valor JSONMétodo de detecciónTipo PHP generadoValor predeterminado propiedad
nullvalue === null?mixed / ?typenull
true / falsetypeof value === 'boolean'boolfalse
42typeof value === 'number' && Number.isInteger(value)int0
3.14typeof value === 'number' && !Number.isInteger(value)float0.0
"hello"typeof value === 'string'string''
[...] (array vacío)Array.isArray(value) && value.length === 0array (PHPDoc array<mixed>)[]
["a","b"]Array.isArray(value) && typeof value[0] === 'string'array (PHPDoc array<string>)[]
[1,2,3]Array.isArray(value) && typeof value[0] === 'number'array (PHPDoc array<int>)[]
[{...},{...}]Array.isArray(value) && typeof value[0] === 'object'array (PHPDoc array<Xxx>)[]
{...} (objeto anidado)typeof value === 'object' && !Array.isArray(value)Xxx (clase independiente)new Xxx()

Tabla comparativa de 4 estilos de código PHP

4 estilos de código de clase PHP admitidos por la herramienta, elige según necesidades del proyecto:

Estilo de códigoHerencia / ModificadorInterfaces implementadasEscenarios aplicables
Estilo ArrayObjectextends \ArrayObjectimplements \JsonSerializableEcosistema Symfony Serializer, necesita acceso tipo array $obj['key'], compatible con biblioteca estándar PHP
Estilo stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, compatible con comportamiento predeterminado json_decode, portador de datos de objeto ligero
Estilo readonly classfinal readonly class (sin herencia)implements \JsonSerializablePHP 8.1+, DTO de respuesta API, objetos de transferencia de datos inmutables, garantiza datos no modificados después de construcción
Estilo integración LaravelSin herencia (predeterminado)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, capa de modelos Eloquent, formateo de respuestas de controlador

Privacy & Security

Todas las operaciones de análisis JSON, generación de clases PHP, empaquetado ZIP de esta herramienta JSON a PHP se completan completamente localmente en tu navegador mediante JavaScript (quicktype-core + JSZip); los datos JSON de entrada y el código PHP generado no se suben a ningún servidor, ni se registran, almacenan en caché o almacenan en la nube. JSON sensible que contiene campos de interfaz interna, estructuras de negocio no lanzadas, respuestas API no públicas se puede usar con confianza, todos los datos se borran al cerrar la página. Esta herramienta no usa ninguna Cookie para seguimiento de usuarios, no recopila información de correo electrónico o cuenta, no incrusta ningún script de estadísticas de terceros, todos los cálculos se completan en el proceso del navegador del dispositivo actual. Incluso en entorno sin conexión (como red desconectada o entorno aislado de red interna), siempre que la página haya cargado recursos una vez se puede usar normalmente.

Authoritative References