Инструмент Tool Kumar

JSON в классы PHP

Генерируйте классы для PHP 8.1 или новее с типизированными readonly-свойствами, объявленными в конструкторе (constructor promotion). У каждого класса есть метод fromArray, который сопоставляет исходные ключи JSON и создаёт вложенные объекты.

Как пользоваться инструментом

  1. Вставьте типичный ответ, включая записи с разным набором полей.
  2. Проверьте сгенерированный код и при необходимости измените имя корня.
  3. Скопируйте или скачайте код, затем сверьте типы с контрактом вашего 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.

Похожие инструменты

JSON в Python, JSON в Java и Генератор JSON Schema.