Ferramenta Tool Kumar
JSON para classes PHP
Gere classes PHP 8.1 ou mais recente com propriedades readonly tipadas promovidas no construtor. Cada classe tem um método fromArray que mapeia as chaves JSON originais e constrói objetos aninhados.
Como usar esta ferramenta
- Cole uma resposta representativa, incluindo registros cujos campos sejam diferentes.
- Revise a saída gerada e altere o nome raiz se necessário.
- Copie ou baixe o código e confira se os tipos correspondem ao contrato da sua API.
Exemplo prático
Esta saída vem do conversor integrado. Os dois preços de item permitem inferir um campo de ponto flutuante. Os valores null e string de note permitem inferir um campo que aceita null.
Entrada
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Saída
<?php
declare(strict_types=1);
final class Root
{
public function __construct(
public readonly int $userId,
public readonly Profile $profile,
/** @var Item[] */
public readonly array $items,
) {
}
public static function fromArray(array $data): self
{
return new self(
userId: $data['user-id'],
profile: Profile::fromArray($data['profile']),
items: array_map(static fn ($x) => Item::fromArray($x), $data['items']),
);
}
}
final class Profile
{
public function __construct(
public readonly string $city,
public readonly string $createdAt,
) {
}
public static function fromArray(array $data): self
{
return new self(
city: $data['city'],
createdAt: $data['created_at'],
);
}
}
final class Item
{
public function __construct(
public readonly float $price,
public readonly ?string $note,
) {
}
public static function fromArray(array $data): self
{
return new self(
price: $data['price'],
note: $data['note'],
);
}
}
Escolha um array ou um modelo tipado
Para um array associativo PHP, json_decode com true basta. Para usar os modelos gerados, passe esse array para Root::fromArray. JSON_THROW_ON_ERROR informa entradas malformadas.
Se um ID exceder PHP_INT_MAX, JSON_BIGINT_AS_STRING pode preservar seus dígitos, mas você precisa mudar a propriedade float gerada correspondente para string. Um float inferido não é um tipo exato para IDs.
$data = json_decode($responseBody, true, 512, JSON_THROW_ON_ERROR);
$model = Root::fromArray($data);Opções e casos especiais
- A saída começa com declare(strict_types=1) e gera classes final. Arrays de objetos aninhados recebem tipos de item em PHPDoc e construção com array_map.
- Valores que aceitam null usam ?type; um campo observado apenas como null ou com tipos mistos usa mixed. Datas continuam sendo string.
- Inteiros usam int, e inteiros fora do intervalo de 64 bits com sinal usam float. Isso pode causar perda de precisão. Revise os limites da plataforma PHP e decodifique IDs grandes como strings quando necessário.
- Não há implementação de toArray nem de JsonSerializable. Adicione serialização explícita se precisar das chaves JSON originais ao codificar as classes.
Privado por padrão
Seu documento fica neste navegador. O Tool Kumar analisa, converte e cria downloads no seu dispositivo, sem conta e sem envio ao servidor.
JSON para classes PHP: perguntas frequentes
- Posso converter JSON em um array associativo PHP?
- Sim, usando o próprio PHP: json_decode($json, true, 512, JSON_THROW_ON_ERROR). Este gerador produz classes de modelo tipadas em vez de um literal de array PHP.
- Qual versão de PHP o código gerado exige?
- PHP 8.1 ou mais recente para propriedades readonly promovidas. A saída também usa propriedades tipadas, argumentos nomeados e strict_types.
- Como objetos aninhados viram classes?
- fromArray chama o método fromArray da classe aninhada. Arrays de objetos aninhados usam array_map, com os tipos dos itens registrados em PHPDoc.
- Ele preserva as chaves ao codificar de volta para JSON?
- O método fromArray preserva os mapeamentos de entrada. A saída não tem um codificador personalizado, então json_encode nesses objetos usa os nomes das propriedades. Adicione JsonSerializable ou um método toArray se precisar das chaves originais do JSON.