Инструмент Tool Kumar
JSON в классы PHP
Генерируйте классы для PHP 8.1 или новее с типизированными readonly-свойствами, объявленными в конструкторе (constructor promotion). У каждого класса есть метод fromArray, который сопоставляет исходные ключи JSON и создаёт вложенные объекты.
Как пользоваться инструментом
- Вставьте типичный ответ, включая записи с разным набором полей.
- Проверьте сгенерированный код и при необходимости измените имя корня.
- Скопируйте или скачайте код, затем сверьте типы с контрактом вашего API.
Пример с разбором
Этот результат создан встроенным конвертером. По двум ценам товаров выводится тип поля с плавающей точкой. Значения null и строка в поле note дают тип, допускающий null.
Ввод
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Результат
<?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'],
);
}
}
Выберите массив или типизированную модель
Для ассоциативного массива PHP достаточно json_decode с true. Чтобы использовать сгенерированные модели, передайте этот массив в Root::fromArray. JSON_THROW_ON_ERROR сообщает о некорректных входных данных.
Если ID превышает PHP_INT_MAX, JSON_BIGINT_AS_STRING может сохранить его цифры, но соответствующее сгенерированное свойство float нужно заменить на string. Выведенный тип float не подходит для точных ID.
$data = json_decode($responseBody, true, 512, JSON_THROW_ON_ERROR);
$model = Root::fromArray($data);Параметры и особые случаи
- Код начинается с declare(strict_types=1) и содержит final-классы. Для вложенных массивов объектов типы элементов указываются в PHPDoc, а объекты создаются через array_map.
- Для значений, допускающих null, используется ?type, а для полей только со значением null или значениями разных типов — mixed. Даты остаются string.
- Целые числа получают тип int, а целые за пределами 64-битного диапазона со знаком — float. Это может привести к потере точности. Проверьте ограничения платформы PHP и при необходимости декодируйте большие ID как строки.
- Реализации toArray или JsonSerializable нет. Если при кодировании классов нужны исходные ключи JSON, добавьте явную сериализацию.
Конфиденциальность по умолчанию
Документ остаётся в этом браузере. Tool Kumar разбирает и конвертирует данные, создаёт файлы для скачивания на вашем устройстве, без регистрации и отправки на сервер.
Вопросы об инструменте «JSON в классы PHP»
- Можно ли конвертировать JSON в ассоциативный массив PHP?
- Да, средствами самого PHP: json_decode($json, true, 512, JSON_THROW_ON_ERROR). Этот генератор создаёт типизированные классы моделей, а не литерал массива PHP.
- Какая версия PHP нужна для сгенерированного кода?
- PHP 8.1 или новее — для readonly-свойств, объявленных в конструкторе. Код также использует типизированные свойства, именованные аргументы и strict_types.
- Как вложенные объекты становятся классами?
- fromArray вызывает метод fromArray вложенного класса. Массивы вложенных объектов обрабатываются через array_map, а типы элементов записаны в PHPDoc.
- Сохраняются ли ключи при обратном кодировании в JSON?
- Метод fromArray сохраняет сопоставление входных ключей. Собственного кодировщика в коде нет, поэтому json_encode для этих объектов использует имена свойств. Если нужны исходные ключи, добавьте JsonSerializable или метод toArray.