logo
GeekFormat

JSON para PHP

Ferramenta online gratuita JSON para PHP, converte JSON em classes PHP executáveis diretamente em um clique. Suporta dois estilos ArrayObject e stdClass, gera automaticamente namespace, typed properties (PHP 7.4+), readonly class opcional (PHP 8.1+), implementa JsonSerializable, objetos aninhados divididos automaticamente em classes independentes, arrays convertidos automaticamente em array PHP, execução local no navegador sem download.

Sugestões Relacionadas

Sobre JSON para classe PHP e modelagem de classes de entidade PHP

A ferramenta JSON para PHP (JSON to PHP Converter) é um utilitário que converte automaticamente estruturas de dados JSON em código de classe PHP padrão. Libera os desenvolvedores do trabalho repetitivo de escrever manualmente namespace / class / propriedades public / construtor, particularmente adequado para converter rapidamente JSON de exemplo na documentação de interface API em classes de entidade PHP que podem ser incluídas diretamente em projetos Composer via require.

Esta ferramenta suporta 4 estilos de código principais: ① Estilo ArrayObject (estende \ArrayObject, suporta acesso array e objeto, comum no ecossistema Laravel / Symfony Serializer); ② Estilo stdClass (estende \stdClass, apenas acesso objeto, comportamento padrão WordPress / json_decode); ③ Estilo readonly class (PHP 8.1+ final readonly class, imutável após construção, adequado para DTO); ④ Estilo integração Laravel (implementa Jsonable + Arrayable, funciona com Eloquent API Resource). Os desenvolvedores podem escolher livremente conforme framework usado pelo projeto.

O mapeamento de tipos PHP é o coração do JSON para PHP. A ferramenta mapeia tipos básicos JSON em tipos padrão PHP: string mapeia para string, inteiro para int, float para float, booleano para bool, array para array, objetos aninhados para classe independente (primeira letra do nome do campo em maiúscula), null para ?type (propriedade nullable). Todas as propriedades são declaradas com typed properties do PHP 7.4+, o IDE pode fazer verificação de tipos diretamente.

Outro ponto forte diferenciador é 'implementa automaticamente interface JsonSerializable': cada classe PHP gerada por esta ferramenta implementa automaticamente \JsonSerializable e gera método public function jsonSerialize(): mixed { return [...] }. Isso significa que você pode fazer diretamente echo json_encode($user) para exibir string JSON, e json_encode chamará automaticamente os dados do array retornados por jsonSerialize(). No Laravel com a interface Jsonable você também pode fazer diretamente return response()->json($user) sem qualquer processamento adicional.

Ao contrário de algumas ferramentas online que requerem enviar JSON para servidor para processar, todos os cálculos desta ferramenta são executados no navegador. quicktype-core é carregado e executado via Web Worker; análise JSON, inferência de tipos, geração de código PHP, empacotamento ZIP ocorrem localmente, não enviam dados para nenhum servidor. Isso é particularmente importante para JSON contendo chaves API, campos de confidencialidade do usuário ou estruturas de negócio não lançadas; os dados são apagados da memória após fechar a página.

O código gerado deve geralmente ser colocado no projeto Composer para uso. Você deve garantir que a versão PHP atenda aos requisitos no composer.json (PHP 7.4+ suporta typed properties, PHP 8.1+ suporta readonly class), então copiar as classes geradas no diretório src, carregamento automático via namespace (PSR-4). Depois você pode consumir dados com json_decode($jsonString, false) ou json_decode($jsonString, true) + desserialização, aproveitando as vantagens do sistema de tipos PHP.

Casos de uso

  • Desenvolvimento backend Laravel: converter rapidamente JSON de exemplo da documentação de interface API em classes Eloquent Model / API Resource, serializar respostas diretamente com interfaces Jsonable / Arrayable integradas do Laravel
  • Integração Symfony Serializer: converter JSON retornado por APIs de terceiros em classes PHP estilo ArrayObject, fazer mapeamento profundo de objetos e validação de dados com Symfony Serializer
  • WordPress REST API: converter estrutura JSON retornada por endpoints personalizados em classes PHP estilo stdClass, saída direta com wp_send_json(), compatível com o comportamento padrão de wp_json_encode()
  • PHP 8.1+ readonly DTO: converter JSON em final readonly class para Data Transfer Object (DTO), imutáveis após construção, evitando que a lógica de negócio modifique acidentalmente os dados de resposta
  • Desenvolvimento de pacotes Composer: converter JSON Schema em classes PHP então publicar no Packagist como camada de modelo SDK, para que outros projetos Composer o requeiram e reutilizem
  • Fixture de testes unitários: converter fixture JSON em classes PHP então usar json_decode + desserialização para testes baseados em dados, assertion de campos estruturados
  • Scripts de migração de dados: converter arquivos de configuração JSON em classes PHP então usá-las para acesso fortemente tipado na lógica de negócio, mais fácil autocompletar IDE e verificação de tipos do que acesso array
  • Integração Frontend Mock: backend converte primeiro modelos JSON em classes PHP, frontend obtém simultaneamente a interface TypeScript / classe PHP correspondente, mantendo os tipos consistentes em ambas as extremidades
  • Code review: converter JSON retornado por API diretamente em classes PHP legíveis, facilitando discussão sobre nomenclatura de campos, visibilidade de propriedades durante Code Review
  • Refatoração de projetos legados: refatorar código de acesso dinâmico baseado em array associativo em acesso fortemente tipado baseado em classe PHP, fazer análise estática com PHPStan / Psalm
  • PHPUnit DataProvider: converter dados de teste JSON em classes PHP então injetar no caso de teste via DataProvider, o IDE sugere automaticamente os campos das propriedades
  • Integração API backend snake_case: API backend retorna campos snake_case, o sistema PHP frontend ativa 'converter para camelCase' + estilo ArrayObject para integração transparente
  • Análise estática PHPStan: as classes geradas têm naturalmente declarações de tipo, com phpstan analyse --level=8 interceptar erros de tipo em CI
  • Ensino e formação: em cenários de ensino PHP, converter JSON de exemplo em classes PHP para demonstrar modelagem orientada a objetos, sistema de tipos, implementação de interfaces
  • Camada gateway API: converter JSON retornado por microsserviços a montante em classes PHP para agregação na camada gateway, os serviços PHP a jusante consomem fortemente tipados via propriedades de classe
  • Consumo de filas de mensagens: converter corpos de mensagens JSON consumidos de RabbitMQ / Kafka em classes PHP então armazenar ou reenviar, análise rigorosa com JSON_THROW_ON_ERROR
  • Modelagem SKU/SPU e-commerce: converter estrutura JSON de produto (multi-especificação / multi-imagem / multi-atributo) em classes PHP, com estilo ArrayObject fazer otimização de consultas N+1 no Laravel
  • Verificação de assinatura de callback WebHook: converter estrutura de verificação de assinatura JSON de gateways de pagamento, callbacks logísticos em classes PHP, verificação de assinatura com hash_hmac()
  • Toolchain OpenAPI: converter schema JSON do OpenAPI 3.x em classes PHP, integrar com fluxo de geração de cliente PHP do Swagger Codegen / Apifox
  • Pipeline ETL de dados: converter JSON de fontes de dados a montante (campo JSON MySQL / MongoDB / Elasticsearch) em classes PHP então limpeza de dados e armazenamento

Como Usar

  1. Cole objeto JSON (recomendado) ou array no editor à esquerda, ou clique em 'Sample' para carregar exemplo em chinês (com address / company / tags aninhados)
  2. Clique no botão 'Configurações' na barra de ferramentas, na caixa de diálogo selecione: ① defina nome da classe raiz (ex. User) e namespace (ex. App\Models); ② selecione estilo de código (ArrayObject / stdClass / readonly class); ③ selecione funcionalidades de código (typed properties / integração Laravel / Symfony Serializer); ④ selecione estratégia de nomenclatura de campos (manter original / camelCase / tudo minúsculas / UPPER_SNAKE)
  3. A ferramenta converterá automaticamente em 400ms, a direita mostra todas as classes PHP geradas (cada classe um card separado, a barra de título mostra badge de estilo atual em tempo real); se JSON tiver erros de formato será exibido botão 'Reparar JSON'
  4. Verifique que nomes de classe gerados, nomes de propriedades e interfaces atendam às expectativas; se for necessário adaptação você pode modificar os nomes das chaves do JSON de origem ou reabrir Configurações para modificar as opções
  5. Quando satisfeito pode clicar no botão 'Copiar' da classe individual para colar no IDE, ou clicar em 'Download ZIP' na barra de ferramentas para baixar todas as classes em um clique (estrutura de diretórios organizada por caminho namespace)

Recursos

  • Dois estilos de código livremente alternáveis: ArrayObject (estende \ArrayObject, suporta acesso estilo array $obj['key']) / stdClass (estende \stdClass, suporta acesso estilo objeto $obj->key), compatível com diferentes cenários como serialização Laravel, WordPress REST, Symfony Serializer
  • Template PHP completo: gera automaticamente declaração namespace + instruções use + comentário de cabeçalho de classe (Copyright + timestamp de geração) + definição de classe + propriedades públicas tipadas (PHP 7.4+), pode ser incluído diretamente em projeto Composer via require sem completar manualmente o boilerplate
  • Interface JsonSerializable implementada automaticamente: cada classe gerada cria automaticamente public function jsonSerialize(): mixed { return [...] }, serializa JSON diretamente com json_encode(), zero código boilerplate adicional
  • readonly class PHP 8.1+ opcional: ao ativar, a classe gerada adiciona final readonly class, todas as propriedades são readonly, imutáveis após construção, adequado para cenários DTO de resposta API imutáveis
  • Inferência de tipos inteligente: string → string, integer → int, float → float, bool → bool, array → array, objetos aninhados → classe independente, null → ?type (propriedade nullable), sem especificação manual de tipos de campo
  • Classes aninhadas divididas automaticamente: objetos aninhados geram classes PHP independentes com primeira letra do nome do campo em maiúscula (ex. address → Address), objetos em arrays nomeados segundo regra 'remover s final' (ex. users → User), todas as classes aninhadas também implementam JsonSerializable
  • 4 estratégias de nomenclatura de campos: manter original / snake_case para camelCase (user_name → userName) / tudo minúsculas / estilo constantes UPPER_SNAKE, conformes a diferentes padrões de codificação PSR-1 / Laravel / Symfony
  • Integração Laravel em um clique: ao ativar, implementa automaticamente interfaces Jsonable, Arrayable, adiciona métodos toArray() / toJson(), pode ser usado diretamente como Eloquent API Resource, com autoload Composer
  • Copiar classe individual + download ZIP multi-arquivo: cada classe PHP tem botão 'Copiar' separado, pode baixar em um clique pacote ZIP organizado por estrutura de diretórios namespace (ex. App/Models/User.php), descompactar e usar
  • Execução local no navegador + histórico: análise JSON, geração de classes PHP, empacotamento ZIP via JavaScript (quicktype-core + JSZip) no navegador, dados não enviados para servidor; histórico localStorage integrado para 200 entradas recentes

Exemplos de Código

PHP: Serializar classes geradas por esta ferramenta com json_encode()

php

As classes PHP geradas por esta ferramenta implementam a interface JsonSerializable por padrão, retornam JSON diretamente com json_encode() sem qualquer processamento adicional.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// Simula string JSON recebida de API
$jsonString = '{"id":1,"name":"Alice","email":"a****@***********","isActive":true}';

// 1) Desserializa em classe gerada por esta ferramenta
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) Acesso aos campos fortemente tipado (autocompletar IDE + verificação estática PHPStan)
echo $user->name;          // Alice
echo $user->email;         // a****@***********
echo $user->isActive ? 'Ativo' : 'Inativo'; // Ativo

// 3) json_encode() chama automaticamente jsonSerialize(), nenhum código adicional necessário
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "a****@***********",
    "isActive": true
}
*/

PHP: Exemplo de integração Laravel API Resource

php

Após marcar integração Laravel, as classes geradas por esta ferramenta podem ser usadas diretamente como Eloquent API Resource, formatando respostas com toArray() / toJson().

<?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: Exemplo de integração Symfony Serializer

php

As classes geradas em estilo ArrayObject por esta ferramenta podem trabalhar com o componente Symfony Serializer para serialização e desserialização profunda, adequadas para camadas de gateway de API complexas.

<?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 a maioria dos projetos backend PHP, as classes geradas em estilo ArrayObject suportam tanto acesso array ($obj['key']) quanto acesso objeto ($obj->key); com a interface JsonSerializable implementada por padrão, json_encode() chama automaticamente o array retornado por jsonSerialize(). Este é o padrão de transporte de dados de objeto mais universal no ecossistema PHP, compatível com quase todos os frameworks mainstream como Laravel, Symfony, CodeIgniter.

A classe readonly introduzida no PHP 8.1+ é a melhor prática para DTOs: propriedades imutáveis após a construção, impedindo que a lógica de negócios modifique acidentalmente os dados de resposta; a promoção de construtor torna o código mais conciso (public function __construct(public int $id, public string $name) {} uma linha para as declarações de propriedades). Recomendamos converter os DTOs de resposta API, estruturas de callback WebHook, modelos cliente API de terceiros para o estilo readonly class.

Os campos de banco de dados Laravel são por padrão snake_case, mas as propriedades PHP recomendam camelCase. A estratégia 'Converter para camelCase' desta ferramenta converte automaticamente, enquanto as chaves do array de retorno de jsonSerialize() mantêm o snake_case original; a saída json_encode() permanece snake_case. Isto respeita tanto os hábitos de acesso ao modelo Laravel quanto mantém a compatibilidade API.

Os pacotes ZIP gerados são organizados por caminho namespace (ex. App/Models/User.php). Configure a seção autoload.psr-4 no composer.json, por exemplo: "App\\": "src/", em seguida execute composer dump-autoload. Desta forma o Composer mapeará automaticamente App\Models\User para src/Models/User.php sem require manual.

Esta ferramenta gera por padrão propriedades tipadas (PHP 7.4+), cujos tipos de propriedades podem ser completamente inferidos pelo PHPStan no modo --level=8. Recomendamos integrar phpstan analyse ./src --level=8 na pipeline CI para interceptar erros de tipo. Psalm também suporta PropertyTypeProvider para validação de tipo forte.

Esta ferramenta é executada completamente localmente no navegador e não carrega nenhum dado. Mas crie o hábito: ① dessensibilize JSONs contendo chaves API / tokens / privacidade de usuário antes da conversão; ② certifique-se de que a conexão de rede está desconectada ao usar esta ferramenta para grandes estruturas de negócios internas (interfaces não lançadas); ③ não commite dados de exemplo contendo informações sensíveis em repositórios públicos após a geração de código.

Objetos JSON aninhados geram recursivamente classes PHP independentes. Se os níveis de aninhamento JSON excederem 6 camadas (ex. menus aninhados multinível, organogramas, documentos de negócios complexos), o número de classes geradas explode (N classes aninhadas por camada), o IDE carrega lentamente e a manutenção se torna difícil. Recomendações: ① divida o JSON em vários módulos e converta separadamente; ② ou após a geração refatore manualmente para indexação de array ($user['profile']['address']['city']) em vez de aninhamento de classes.

Valores null JSON são inferidos por padrão como ?mixed (mixed nullable), que é um fallback seguro mas não um tipo preciso. Se o tipo do campo for conhecido (ex. "nickname": "" infere string), forneça primeiro um valor de exemplo no JSON de origem, após a geração remova o valor de exemplo e altere para um tipo preciso como ?string, melhorando significativamente a precisão da análise estática PHPStan.

Perguntas frequentes

Como converter JSON para classe PHP?

Cole o conteúdo JSON na área de entrada à esquerda, a ferramenta converterá automaticamente em 400ms; ou clique no botão 'Convert' na barra de ferramentas. Após a conversão, a direita mostra todas as classes PHP geradas, cada classe tem botão 'Copiar' separado; clique em 'Download ZIP' na barra de ferramentas para empacotar e baixar todas as classes em um clique (incluindo estrutura de diretórios namespace).

Quais estruturas de dados JSON são suportadas?

Suporta duas estruturas: ① Objeto JSON (como classe raiz, gera automaticamente class RootClass); ② Array JSON (primeiro objeto do array como modelo de classe raiz). Todos os objetos aninhados são processados recursivamente em classes independentes; os objetos em arrays são processados recursivamente em classes correspondentes ao tipo de elemento do array.

O que contêm as classes PHP geradas?

Cada arquivo .php gerado contém: ① comentário de cabeçalho de arquivo (Copyright + timestamp gerado automaticamente); ② declaração namespace; ③ instruções use (incluindo \JsonSerializable / \ArrayAccess etc. importados automaticamente conforme necessidade); ④ definição de classe (ArrayObject / stdClass / readonly class conforme configurações); ⑤ implementações de interfaces (JsonSerializable / Jsonable / Arrayable conforme configurações); ⑥ propriedades públicas tipadas (PHP 7.4+); ⑦ construtor (atribuição de todas as propriedades gerada conforme configurações); ⑧ métodos jsonSerialize() / toArray() / toJson() etc. Completamente prontos para verificação de sintaxe php -l e uso via require.

Qual é a diferença entre os estilos ArrayObject e stdClass?

Estilo ArrayObject: classe gerada estende \ArrayObject, suporta tanto acesso estilo array $obj['key'] quanto acesso estilo objeto $obj->key, retorna objeto durante json_encode(). Estilo stdClass: classe gerada estende \stdClass, suporta apenas acesso estilo objeto $obj->key, mais leve mas sem acesso direto a arrays. O ecossistema Laravel/WordPress usa estilo stdClass por padrão (comportamento padrão de json_decode), o Symfony Serializer usa estilo ArrayObject por padrão.

Suporta a geração de Laravel API Resource?

Sim. Após ativar a opção 'Integração Laravel em um clique' nas configurações, a ferramenta gera automaticamente interfaces Jsonable, Arrayable implementadas, adiciona métodos toJson($options = 0) e toArray(), as classes geradas podem ser usadas diretamente em Eloquent API Resource (como new UserResource($user) ou $user->toArray()). Também usa automaticamente Illuminate\Contracts\Support\Jsonable e Illuminate\Contracts\Support\Arrayable.

Qual é a aparência do código gerado no modo PHP 8.1 readonly class?

Após ativar readonly class, as classes PHP geradas são simplificadas significativamente. Por exemplo, class User com readonly ativado tem cerca de 12 linhas: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Todas as propriedades são declaradas readonly via promoção de propriedades do construtor (constructor property promotion), imutáveis após construção. Nota: o projeto requer PHP 8.1+, os campos readonly só podem ser atribuídos via construtor.

Como converter nomes de campo snake_case para camelCase?

No grupo 'Estratégia de nomenclatura de campos' da caixa de diálogo Configurações, selecione o modo 'Converter para camelCase', a ferramenta converterá automaticamente nomes de campo JSON de snake_case para o estilo de nomenclatura recomendado pelo PHP. Por exemplo user_name → userName, created_at → createdAt, is_active → isActive. Além disso, se JSON vier de binding de rota Laravel, as propriedades da classe são acessíveis diretamente via $request->userName sem conversão intermediária manual.

Como os objetos JSON aninhados são processados?

A ferramenta cria automaticamente classes PHP independentes para objetos aninhados. Regra de nomenclatura: chave de objeto aninhado com primeira letra maiúscula como nome de classe (ex. address → Address), chave de objeto em array removendo s final depois primeira letra maiúscula (ex. users → User). Todas as classes aninhadas também incluem campos completos, construtor, método jsonSerialize(), namespace consistente com classe raiz, podem ser importadas via use App\Models\Address.

Os campos array são convertidos automaticamente?

Sim. Os campos array em JSON são convertidos automaticamente em propriedades PHP array, tipo de elemento inferido automaticamente do primeiro elemento do array. Por exemplo ["a","b","c"] → array (anotado como array<string> no comentário); [{...},{...}] → array (anotado como array<User> no comentário, User é nova classe nomeada a partir da chave); array vazio [] por padrão array (anotado como array<mixed> no comentário). PHP 8.0+ com anotações PHPDoc pode obter sugestões de tipo no IDE.

Como modificar nome da classe raiz e namespace?

Há um botão Configurações no canto superior direito da barra de ferramentas, clique para abrir caixa de diálogo de configuração, você pode configurar: ① nome da classe raiz (padrão JsonRootClass); ② namespace (padrão App\Models). Após a modificação, todos os nomes de classe gerados são atualizados sincronamente, a estrutura de diretórios no ZIP também é organizada por namespace (ex. App/Models/User.php).

O download é um único arquivo .php ou pacote ZIP?

O download é pacote ZIP (User.zip), contém todas as classes PHP geradas, organizadas em estrutura de diretórios por caminho namespace. Por exemplo, quando namespace é App\Models, a estrutura de arquivos no ZIP é: App/Models/User.php, App/Models/Address.php, App/Models/Company.php etc. Pode ser importado diretamente no diretório src do projeto Composer via comando unzip ou IDE.

Posso copiar uma classe individual diretamente no IDE?

Sim. Cada classe PHP gerada é exibida como um card separado, o canto superior direito do card tem botão 'Copiar', ao clicar todo o código completo da classe (incluindo <?php + namespace + use + classe + propriedades + construtor + métodos) é copiado para a área de transferência, pode ser colado diretamente no IDE como PhpStorm / VS Code / Sublime.

Como fazer com que as classes geradas implementem a interface JsonSerializable?

Ativado por padrão. Todas as classes PHP geradas implementam automaticamente \JsonSerializable e geram método public function jsonSerialize(): array { return [...] }, array retornado montado na ordem das propriedades da classe. Você pode fazer diretamente echo json_encode($user) para exibir string JSON, ou no Laravel return response()->json($user).

Symfony Serializer pode usar as classes geradas por esta ferramenta?

Sim. O Symfony Serializer lê dados em estilo array por padrão, bem compatível com classes geradas em estilo ArrayObject. Com $serializer->serialize($user, 'json') de SerializerInterface pode serializar diretamente; durante a desserialização com deserialize() a classe precisa de propriedades públicas ou getter. Esta ferramenta gera estilo propriedades públicas + atribuição por construtor, pode ser usada diretamente com PropertyNormalizer do Symfony Serializer.

O que fazer se JSON tiver erros de formato?

A ferramenta detecta automaticamente a validade JSON, em caso de erro exibe aviso de erro vermelho à direita e fornece botão 'Reparar JSON'. Ao clicar pode reparar automaticamente erros comuns: ① vírgulas finais supérfluas; ② aspas simples substituídas por aspas duplas; ③ completar aspas para chaves sem aspas; ④ remover comentários. Após o reparo bem-sucedido pode converter diretamente para gerar classes PHP.

Os dados são enviados para servidor? É privado e seguro?

Execução completamente local no navegador. Toda a análise JSON, geração de classes PHP, empacotamento ZIP ocorrem no seu navegador via JavaScript (quicktype-core + JSZip), os dados JSON de entrada e o código PHP gerado não são enviados para nenhum servidor, nem salvos ou colocados em cache na nuvem. JSON sensível contendo campos de interface interna, estruturas de negócio não lançadas, respostas de API não públicas pode ser usado com segurança, apagado ao fechar a página.

Gerar um JSON grande de 10.000 linhas causará lentidão?

A ferramenta não tem um limite explícito de linhas, mas a análise e renderização de JSON muito grande pelo navegador serão mais lentas. Recomendações: ① dividir JSON e converter por lotes; ② concentrar-se em um nível de aninhamento de cada vez; ③ se precisar gerar por lotes 100+ classes, recomendamos usar diretamente plugins de modelo PHP do IDE ou escrever um script CLI quicktype simples.

As classes PHP geradas suportam versões anteriores ao PHP 7.4?

Não completamente. As classes geradas por esta ferramenta usam por padrão typed properties do PHP 7.4+ (ex. public int $id). Se seu projeto ainda for PHP 7.0~7.3, as declarações de tipo causarão problemas de compatibilidade. Recomendações: ① atualizar projeto para PHP 8.1+ (recomendado, melhor desempenho e sistema de tipos); ② ou excluir declarações de tipo por lotes no IDE após geração (Find & Replace `public int ` → `public `); ③ ou usar modo compatível PHP 7.4 (PHP 7.4 é a linha base desta ferramenta).

Solução de Problemas

Mostra 'Insira dados JSON' ou direita vazia

A área de entrada à esquerda está vazia ou contém apenas espaços em branco. Certifique-se de ter colado conteúdo JSON válido, ou clique em 'Sample' para carregar exemplo em chinês, ou clique em 'Upload' para selecionar arquivos .json / .txt.

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

Formato JSON inválido. Causas comuns: ① vírgula extra no final (ex. {"a":1,}); ② aspas simples usadas no lugar de aspas duplas; ③ notação de objeto JS (ex. {key: value}) em vez de JSON (ex. {"key": "value"}). Clique no botão 'Reparar JSON' para corrigir automaticamente alguns erros.

Código gerado erro em projeto PHP 7.x com 'Typed property must not be accessed before initialization'

As classes geradas por esta ferramenta usam por padrão propriedades tipadas PHP 7.4+ (ex. public int $id). Se seu projeto ainda está em PHP 7.0~7.3, declarações de tipo causam problemas de compatibilidade. Soluções: ① atualize o projeto para PHP 8.1+ (recomendado, melhor desempenho e sistema de tipos); ② remova em lote as declarações de tipo no IDE (Localizar & Substituir `public int ` → `public `); ③ desmarque a opção 'Propriedades tipadas PHP 7.4' (eficaz apenas para alguns estilos de código).

Classe readonly PHP 8.1 erro 'Cannot modify readonly property'

Propriedades geradas em estilo readonly class não podem ser modificadas após a construção. Se você tentar $user->name = 'Bob' ocorrerá um erro. Soluções: ① mude para o estilo ArrayObject ou stdClass (propriedades modificáveis); ② ou crie uma nova instância com new User(...) em vez de modificar.

Não foi possível encontrar Illuminate\Contracts\Support\Jsonable em projeto Laravel

O estilo de integração Laravel requer a dependência laravel/framework. Certifique-se no composer.json de ter: "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Em seguida execute composer update para instalar dependências. Se você não usa Laravel, por favor escolha o estilo ArrayObject ou stdClass.

Falha na desserialização Symfony Serializer 'Cannot denormalize object'

Causas comuns: ① a classe gerada não tem propriedades públicas ou métodos getter (Symfony Serializer usa PropertyNormalizer por padrão); ② a classe não tem construtor sem parâmetros mas tem parâmetros obrigatórios. Soluções: ① confirme que esta ferramenta gerou propriedades públicas; ② construa manualmente o objeto através do método estático fromArray() depois passe para o Serializer.

Nome de classe de objeto aninhado diferente do esperado (ex. categories nomeado como Categori)

A ferramenta usa a regra de nomenclatura 'remover s final + capitalizar' para objetos em arrays; para plurais irregulares como categories isso não é preciso. Recomendações: ① mude a chave JSON de origem para singular (ex. categories → category); ② ou após a geração use Renomear do IDE para renomear a classe (modificando todas as referências simultaneamente).

Estrutura de diretórios do ZIP incorreta após extração

Os diretórios dentro do ZIP são organizados conforme a configuração de namespace (padrão App/Models/). Se a posição estiver incorreta após extração: ① modifique o nome namespace (ex. para App\Dto) e baixe novamente; ② especifique diretório de extração com unzip -d src/; ③ ou diretamente no IDE Arquivo → Abrir toda a pasta extraída.

Classes geradas não são carregadas automaticamente

Projetos Composer requerem configuração de mapeamento autoload PSR-4 no composer.json, por exemplo: "autoload": { "psr-4": { "App\\": "src/" } }. Em seguida execute composer dump-autoload; o Composer carregará automaticamente os arquivos de classe por mapeamento namespace-para-diretório.

Nome do campo alterado após conversão snake_case para camelCase

'Converter para camelCase' altera nomes de propriedades PHP (ex. user_name → userName), mas as chaves do array de retorno no método jsonSerialize() mantêm o snake_case original; o JSON gerado por json_encode() ainda tem os nomes de campo originais. Então para acessar a propriedade PHP use $user->userName, a saída JSON ainda é {"user_name": "..."}. Se você também quiser acesso camelCase durante a desserialização, deve alterar as chaves para camelCase no array de retorno de jsonSerialize().

Página fica lenta ao gerar 100+ classes aninhadas

A ferramenta não tem limite explícito de número de classes, mas o desempenho de renderização de DOM muito grande do navegador diminui significativamente. Recomendações: ① divida o JSON em vários módulos independentes e converta separadamente; ② ou use diretamente as ferramentas de geração de código integradas no IDE (ex. plugin JSON to PHP do PhpStorm); ③ é recomendado que os níveis de aninhamento não ultrapassem 6 camadas, caso contrário recomendamos refatorar a estrutura JSON.

Array é do tipo numérico mas gera array<int> em vez de array<float>

A ferramenta infere o tipo com base no primeiro elemento do array (ex. [1, 2, 3] infere int, [1.5, 2.5] infere float). Se você misturar inteiros e floats (ex. [1, 2.5]), a ferramenta inferirá com base no primeiro elemento. Soluções: ① adicione pelo menos um elemento float de exemplo no JSON de origem (ex. [0.0, 1.5]); ② ou ajuste manualmente o tipo na anotação PHPDoc após a geração.

Campo de valor null gerado como tipo ?mixed em vez de ?string

Valores null JSON são inferidos por padrão como tipo ?mixed pela ferramenta (porque o tipo real não pode ser determinado). Esta é uma prática segura para evitar erros de julgamento. Se o tipo for conhecido, dê a este campo um valor de exemplo no JSON de origem (ex. "field": "" infere string), após a geração altere o tipo para ?string.

Após composer dump-autoload a classe ainda não carrega automaticamente

Possíveis causas: ① namespace não corresponde ao diretório (ex. namespace App\Models mas arquivo em src/Dto/); ② o mapeamento psr-4 do composer.json está escrito incorretamente (ex. "App\\": "src/Dto/" deveria ser "App\\Dto\\": "src/Dto/"). Soluções: verifique que o namespace de cada arquivo .php corresponde estritamente ao caminho do diretório (os segmentos namespace devem ser iguais aos segmentos de diretório, diferenciando maiúsculas de minúsculas).

PHPStan reporta 'Property does not have default value'

Propriedades tipadas geradas não têm valores padrão; PHPStan no modo --level=8 as considera como potencialmente não inicializadas. Soluções: ① desative as regras estritas do PHPStan; ② atribua valores vazios no construtor (ex. $this->tags = []); ③ use o estilo readonly class (atribuído imediatamente após a promoção do construtor).

Falha na desserialização de array de objetos Symfony Serializer

Para arrays de objetos como [{...},{...}], PropertyNormalizer precisa de dicas de tipo de elemento. Soluções: ① especifique explicitamente o tipo array<User> no PHPDoc; ② ou envolva com ArrayCollection ($users = new ArrayCollection()).

Chaves chinesas geram nomes de propriedades PHP com caracteres especiais

Quando o JSON de origem contém chaves chinesas (ex. "姓名": "Alice"), a ferramenta gerará uma propriedade public string $姓名; o IDE pode sinalizar que a nomenclatura não é padrão mas não ocorrerá nenhum erro. Recomendações: ① mude as chaves JSON para inglês (mais conforme a convenção de nomenclatura PHP PSR-1); ② mantendo o chinês certifique-se de que a codificação do arquivo PHP é UTF-8 (PHP é UTF-8 por padrão).

Estilo ArrayObject $obj['key'] vs $obj->key ordem de saída inconsistente

Acesso array no estilo ArrayObject retorna na ordem de declaração da propriedade, acesso objeto retorna na ordem do array de retorno no método jsonSerialize(). Se as duas ordens forem inconsistentes, a saída de echo json_encode() será inconsistente com var_dump($obj). Recomendação: mantenha a ordem de retorno de jsonSerialize() consistente com a ordem dos parâmetros do construtor.

ID numérico em JSON de callback WebHook excede PHP_INT_MAX

O int do PHP em sistemas 64 bits é um inteiro com sinal de 64 bits (valor máximo 9223372036854775807); se o ID numérico em JSON exceder este intervalo (ex. IDs floco de neve do Twitter), ele será truncado. Soluções: ① receba o ID como tipo string ("id": "1234567890123456789"); ② analise com a flag JSON_BIGINT_AS_STRING.

Glossário

namespace
Mecanismo de namespaces introduzido no PHP 5.3+ para evitar conflitos de nomes de classe. Esta ferramenta gera automaticamente conforme namespace configurado pelo usuário e organiza no ZIP por diretório App/Models/.
class
Modelo que define objetos no PHP. Esta ferramenta gera class PHP padrão, instanciável diretamente via new User(...).
ArrayObject
Classe na biblioteca padrão SPL do PHP que implementa interfaces como ArrayAccess. As classes geradas em estilo ArrayObject por esta ferramenta herdam de \ArrayObject, suportando acesso duplo estilo array e objeto.
stdClass
Classe de objeto genérica integrada do PHP; json_decode($json, false) retorna este tipo por padrão. As classes geradas em estilo stdClass por esta ferramenta herdam de \stdClass, suportam apenas acesso estilo objeto.
typed properties
Declarações de tipo de propriedade introduzidas no PHP 7.4+ (ex. public int $id). As propriedades geradas por esta ferramenta têm declarações de tipo por padrão; o IDE e ferramentas de análise estática podem fazer verificação de tipos diretamente.
readonly class
Classe somente leitura introduzida no PHP 8.1+; todas as propriedades na classe são automaticamente readonly, não modificáveis após construção. Esta ferramenta gera final readonly class em estilo readonly, adequado para cenários DTO imutáveis.
JsonSerializable
Interface introduzida no PHP 5.4+; objetos que implementam esta interface chamam automaticamente o método jsonSerialize() durante json_encode(). Todas as classes desta ferramenta implementam automaticamente esta interface.
Jsonable (Laravel)
Interface de contrato do framework Laravel; após implementação, o objeto pode chamar toJson() para retornar JSON. O estilo integração Laravel desta ferramenta implementa automaticamente esta interface.
Arrayable (Laravel)
Interface de contrato do framework Laravel; após implementação, o objeto pode chamar toArray() para retornar array. O estilo integração Laravel desta ferramenta implementa automaticamente esta interface.
Composer
Ferramenta oficial de gerenciamento de dependências do PHP. Ao usar o código gerado por esta ferramenta, é necessário configurar autoload PSR-4 em composer.json (ex. App\\: src/).
PSR-4
Padrão de autoload especificado pelo PHP-FIG, que carrega arquivos de classe via mapeamento namespace para diretório. O pacote ZIP gerado por esta ferramenta é organizado por caminho namespace, compatível com o padrão PSR-4.
Symfony Serializer
Framework de serialização do componente Symfony. As classes geradas em estilo ArrayObject por esta ferramenta podem colaborar com PropertyNormalizer do Symfony Serializer para serialização e desserialização profundas.
Eloquent API Resource
Classe de recursos API do Laravel Eloquent, usada para formatar respostas API. As classes geradas em estilo integração Laravel por esta ferramenta podem ser usadas diretamente como classes base API Resource.
composer.json
Arquivo de configuração do projeto Composer. Após colocar o código gerado por esta ferramenta no diretório src, é necessário configurar seção autoload em composer.json e executar composer dump-autoload.
json_encode / json_decode
Funções integradas de serialização e desserialização JSON do PHP. Após classes geradas por esta ferramenta implementarem JsonSerializable, json_encode() chama automaticamente o método jsonSerialize().
PHPUnit DataProvider
Mecanismo de provedor de dados do framework de testes PHPUnit. As classes PHP geradas por esta ferramenta podem ser injetadas no caso de teste como DataProvider, melhorando a eficiência de escrita de testes com autocompletar IDE.
PHPStan
Ferramenta de análise estática para PHP, pode fazer verificação de tipos, detecção de erros no código. As classes geradas por esta ferramenta, tendo typed properties, podem ter tipos de propriedade completamente inferidos pelo PHPStan no modo --level=8.
Psalm
Outra ferramenta de análise estática para PHP, open-source da Vimeo. As classes geradas por esta ferramenta, com PropertyTypeProvider do Psalm, podem fazer validação de tipos forte.
Doctrine
Conjunto de ferramentas ORM e DBAL no ecossistema PHP. As classes PHP geradas por esta ferramenta podem servir de esqueleto para Doctrine Entity, então adicionar manualmente anotações como #[ORM\Column].
php -l
Diretiva de verificação de sintaxe na linha de comando PHP. As classes geradas por esta ferramenta podem primeiro executar php -l User.php para validação de sintaxe antes de require no projeto.
Composer dump-autoload
Comando para fazer Composer regenerar índice de autoload. Após colocar as classes geradas por esta ferramenta no diretório src, é necessário executar composer dump-autoload para serem reconhecidas pelo autoload PSR-4.
JSON_THROW_ON_ERROR
Flag para tratamento de erros de json_decode() no PHP 7.3+; ao ativar, falha na análise JSON lança exceção JsonException. O exemplo Laravel desta ferramenta usa análise rigorosa.
Hash (PHP)
Função de hash integrada do PHP, comumente usada para verificação de assinatura WebHook. As classes de callback WebHook geradas por esta ferramenta funcionam com hash_hmac() para verificação de assinatura.

Tabela de referência mapeamento tipo JSON para tipo PHP

Tipos de dados JSON detectados automaticamente pela ferramenta e referência do tipo PHP correspondente:

Exemplo valor JSONMétodo de detecçãoTipo PHP geradoValor padrão propriedade
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 vazio)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 aninhado)typeof value === 'object' && !Array.isArray(value)Xxx (classe independente)new Xxx()

Tabela de comparação 4 estilos de código PHP

4 estilos de código de classe PHP suportados pela ferramenta; escolha conforme necessidades do projeto:

Estilo códigoEstende / ModificadorImplementa interfaceCaso de uso
Estilo ArrayObjectextends \ArrayObjectimplements \JsonSerializableEcossistema Symfony Serializer, requer acesso estilo array $obj['key'], compatível com biblioteca padrão PHP
Estilo stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, compatível com comportamento padrão json_decode, suporte a dados objeto leve
Estilo readonly classfinal readonly class (sem herança)implements \JsonSerializablePHP 8.1+, DTO resposta API, objetos de transferência de dados imutáveis, garantir que dados não sejam modificados após construção
Estilo integração Laravelsem herança (padrão)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, camada modelos Eloquent, formatação respostas controller

Privacy & Security

Todas as operações de análise JSON, geração de classes PHP, empacotamento ZIP desta ferramenta JSON para PHP ocorrem completamente localmente no seu navegador via JavaScript (quicktype-core + JSZip); os dados JSON de entrada e o código PHP gerado não são enviados para nenhum servidor, nem salvos, colocados em cache ou armazenados na nuvem. JSON sensível contendo campos de interface interna, estruturas de negócio não lançadas, respostas de API não públicas pode ser usado com segurança; todos os dados são apagados ao fechar a página. Esta ferramenta não usa nenhum Cookie para rastreamento de usuários, não coleta informações de e-mail ou conta, não integra scripts de estatísticas de terceiros; todos os cálculos ocorrem no processo do navegador do dispositivo atual. Mesmo em ambiente offline (ex. desconectado ou intranet isolada) funciona normalmente, desde que os recursos da página tenham sido carregados uma vez.

Authoritative References