Skip to content
jsonforge.app

JSON to PHP

Gere classes PHP 8 com propriedades readonly promovidas a partir de uma amostra JSON.

Entrada JSON

Loading editor…

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

  1. Cole uma resposta JSON representativa no painel esquerdo — toda propriedade promovida na classe gerada vem diretamente das chaves presentes naquela amostra.
  2. 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.
  3. 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.
  4. 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.

Perguntas frequentes