JSON to PHP
Gere classes PHP 8 com propriedades readonly promovidas a partir de uma amostra JSON.
Entrada JSON
Código gerado
Digite JSON à esquerda para gerar um tipo a partir dele.
O que é JSON to PHP?
Um conversor de JSON para PHP transforma uma amostra de payload JSON em definições de classes PHP tipadas. O json_decode do PHP devolve ou um stdClass ou um array associativo, e ambos são efetivamente sem tipo: sua IDE não completa nomes de propriedades, analisadores estáticos como PHPStan e Psalm não conseguem verificar nada, e um erro de digitação numa chave só aparece quando a requisição roda. Modelar o payload como classes reais corrige os três problemas. A saída gerada usa constructor property promotion, que comprime o que antes era uma declaração de propriedade, um parâmetro de construtor e uma atribuição numa única linha por campo, mais readonly para que uma resposta decodificada não possa ser modificada por acidente em algum ponto a jusante. Como arrays PHP são genéricos sem tipo, propriedades de array também carregam um docblock nomeando o tipo do elemento, que é o que os analisadores estáticos leem.
Como usar JSON to PHP
- Cole uma resposta JSON representativa no painel esquerdo — toda propriedade promovida na classe gerada vem diretamente das chaves presentes naquela amostra.
- Defina um nome de classe raiz acima da saída (o padrão é "Root"); cada objeto aninhado se torna sua própria classe, nomeada pela chave que o contém.
- Copie as classes para o seu projeto e hidrate-as a partir da saída do json_decode — seja manualmente, seja com uma biblioteca de mapeamento.
- Use o seletor de linguagem acima da saída para emitir a mesma forma em TypeScript, Go ou outra linguagem suportada.
Exemplos
Objeto plano com propriedades readonly promovidas
Entrada
{"id": 1, "name": "Ada", "active": true}
Saída
<?php declare(strict_types=1); final class Root { public function __construct( public readonly int $id, public readonly string $name, public readonly bool $active, ) {} }
Propriedade de array carrega um docblock para análise estática
Entrada
{"user": {"id": 1, "name": "Ada", "roles": ["admin"]}}
Saída
<?php declare(strict_types=1); final class User { public function __construct( public readonly int $id, public readonly string $name, /** @var string[] */ public readonly array $roles, ) {} } final class Root { public function __construct( public readonly User $user, ) {} }
Erros comuns
- Usar esta saída no PHP 7.x — propriedades de construtor promovidas e readonly não passam pelo parser ali, produzindo um erro de sintaxe em vez de uma mensagem útil.
- Apagar os docblocks /** @var string[] */ como se fossem ruído — são a única informação de tipo que a análise estática tem sobre o conteúdo dos arrays, então removê-los enfraquece silenciosamente toda checagem sobre esses dados.
- Esperar que json_decode devolva essas classes diretamente; ele devolve arrays ou stdClass, e o mapeamento para os tipos gerados é uma etapa separada que você ainda precisa escrever ou delegar a uma biblioteca.
Por que usar esta ferramenta
- Usa constructor property promotion, substituindo três linhas de boilerplate por campo por uma só.
- Marca as propriedades como readonly, então uma resposta de API decodificada não pode ser modificada silenciosamente mais tarde no ciclo da requisição.
- Roda inteiramente no cliente, então uma resposta copiada de um endpoint Laravel ou Symfony nunca chega a um servidor apenas para gerar essas classes.