logo
GeekFormat

JSON в PHP

Бесплатный онлайн конвертер JSON в PHP. Преобразуйте JSON в исполняемый PHP класс одним кликом. Поддерживает два стиля ArrayObject и stdClass, автоматически генерирует namespace, typed properties (PHP 7.4+), опциональный readonly class (PHP 8.1+), реализует JsonSerializable, вложенные объекты автоматически разделяются на независимые классы, массивы автоматически преобразуются в PHP array, работает локально в браузере без загрузки на сервер.

Похожие

О JSON to PHP классах и моделировании PHP сущностей

Инструмент JSON в PHP (JSON to PHP Converter) — это практичный инструмент для автоматического преобразования структур данных JSON в стандартный код PHP классов. Он освобождает разработчиков от рутинной работы по ручному написанию namespace / классов / public свойств / конструкторов, особенно подходит для быстрого преобразования примера JSON из документации API в классы PHP сущностей, которые можно напрямую подключать через require в проекты Composer.

Этот инструмент поддерживает 4 основных стиля кода: ① Стиль ArrayObject (наследует \ArrayObject, поддерживает доступ как к массиву и как к объекту, часто используется в экосистеме Laravel / Symfony Serializer); ② Стиль stdClass (наследует \stdClass, только доступ как к объекту, WordPress / поведение json_decode по умолчанию); ③ Стиль readonly class (final readonly class PHP 8.1+, неизменяемый после создания, подходит для DTO); ④ Стиль Laravel интеграции (реализует Jsonable + Arrayable, используется с Eloquent API Resource). Разработчики могут свободно выбирать в зависимости от фреймворка, используемого в проекте.

Сопоставление типов PHP — это ядро JSON to PHP. Этот инструмент сопоставляет базовые типы JSON стандартным типам PHP: строки в string, целые числа в int, числа с плавающей точкой в float, булевы значения в bool, массивы в array, вложенные объекты в независимые классы (с заглавной буквы по имени поля), null в ?type (nullable свойства). Все свойства объявляются через typed properties PHP 7.4+, что позволяет напрямую проверять типы в IDE.

Ещё одно выдающееся преимущество — «Автоматическая реализация интерфейса JsonSerializable»: каждый сгенерированный PHP класс автоматически реализует \JsonSerializable и создаёт метод public function jsonSerialize(): mixed { return [...] }. Это означает, что можно напрямую выводить JSON строку через echo json_encode($user), json_encode автоматически вызовет данные массива, возвращаемые jsonSerialize(). При использовании с интерфейсом Jsonable в Laravel можно напрямую использовать return response()->json($user) без дополнительной обработки.

В отличие от некоторых онлайн-инструментов, требующих загрузки JSON на сервер для обработки, все вычисления этого инструмента выполняются в браузере. quicktype-core загружается и выполняется через Web Worker, разбор JSON, вывод типов, генерация PHP кода, упаковка ZIP — всё локально, данные не отправляются ни на один сервер. Это особенно важно для JSON, содержащего API-ключи, поля персональных данных пользователей или неопубликованные бизнес-структуры, данные удаляются из памяти при закрытии страницы.

Сгенерированный код обычно нужно поместить в проект Composer для использования. Убедитесь, что версия PHP в composer.json соответствует требованиям (PHP 7.4+ поддерживает typed properties, PHP 8.1+ поддерживает readonly class), скопируйте сгенерированные классы в директорию src, затем автозагружайте через namespace (PSR-4). После этого можно потреблять данные через json_decode($jsonString, false) или json_decode($jsonString, true) + десериализация, наслаждаясь удобством системы типов PHP.

Варианты использования

  • Разработка бэкенда Laravel: быстрое преобразование примера JSON из документации API в классы Eloquent Model / API Resource, сериализация ответов со встроенными интерфейсами Laravel Jsonable / Arrayable
  • Интеграция Symfony Serializer: преобразование JSON, возвращаемого сторонними API, в PHP классы стиля ArrayObject, глубокое отображение объектов и валидация данных через Symfony Serializer
  • WordPress REST API: преобразование JSON-структуры, возвращаемой пользовательскими endpoint, в PHP классы стиля stdClass, прямой вывод через wp_send_json(), соответствие поведению wp_json_encode() по умолчанию
  • readonly DTO PHP 8.1+: преобразование JSON в final readonly class, использование как объекта передачи данных (DTO), обеспечение неизменяемости после создания, предотвращение случайного изменения данных ответа бизнес-логикой
  • Разработка Composer-пакетов: преобразование JSON Schema в PHP классы, затем публикация на Packagist для использования как слой SDK моделей, другие проекты Composer могут подключать через require для повторного использования
  • Фикстуры для юнит-тестов: преобразование JSON фикстур в PHP классы, затем выполнение тестов на основе тестовых данных через json_decode + десериализация, утверждение структурированных полей
  • Скрипты миграции данных: преобразование JSON конфигурационных файлов в PHP классы, использование строготипизированного доступа в бизнес-логике, удобнее автодополнение IDE и проверка типов по сравнению с доступом к массивам
  • Интеграция Mock на фронтенде: бэкенд сначала преобразует JSON-модель в PHP класс, фронтенд одновременно получает соответствующий интерфейс TypeScript / PHP класс, поддерживает согласованность типов с обеих сторон
  • Ревью кода: преобразование JSON, возвращаемого API, в удобочитаемые PHP классы, облегчает обсуждение именования полей, видимости свойств при Code Review
  • Рефакторинг устаревших проектов: рефакторинг кода на основе динамического доступа к ассоциативным массивам array в строготипизированный доступ на основе PHP классов, статический анализ с PHPStan / Psalm
  • PHPUnit DataProvider: преобразование тестовых данных JSON в PHP классы, затем инъекция в тест-кейсы через DataProvider, IDE автоматически предлагает поля свойств
  • Интеграция бэкенд API snake_case: когда бэкенд API возвращает поля snake_case, включите «Преобразовать в camelCase» + стиль ArrayObject в фронтенд PHP системе для плавной интеграции
  • Статический анализ PHPStan: сгенерированные классы по умолчанию содержат объявления типов, можно использовать phpstan analyse ./src --level=8 в CI для блокировки ошибок типов
  • Обучение и тренировка: в сценариях обучения PHP преобразование примера JSON в PHP классы для демонстрации объектно-ориентированного моделирования, системы типов, реализации интерфейсов
  • Слой шлюза API Gateway: преобразование JSON, возвращаемого вышестоящими микросервисами, в PHP классы для агрегации на уровне шлюза, нижестоящие PHP сервисы строготипизированно потребляют через свойства классов
  • Потребление очередей сообщений: преобразование тела JSON-сообщений, потребляемых из RabbitMQ / Kafka, в PHP классы, затем сохранение или пересылка, строгий разбор с JSON_THROW_ON_ERROR
  • Моделирование SKU / SPU электронной коммерции: преобразование JSON-структуры товаров (много спецификаций / много изображений / много атрибутов) в PHP классы, оптимизация N+1 запросов в Laravel вместе со стилем ArrayObject
  • Валидация WebHook callback: преобразование JSON-структуры валидации платёжных шлюзов, логистических callback в PHP классы, верификация подписи через hash_hmac()
  • Инструментарий OpenAPI: преобразование schema JSON OpenAPI 3.x в PHP классы, подключение к потоку генерации PHP клиентов Swagger Codegen / Apifox
  • ETL-пайплайны данных: преобразование JSON из вышестоящих источников данных (JSON-поля MySQL / MongoDB / Elasticsearch) в PHP классы, затем очистка и загрузка данных

Как использовать

  1. Вставьте JSON объект (рекомендуется) или массив в левый редактор, или нажмите «Sample» для загрузки китайского примера с вложенными address / company / tags
  2. Нажмите кнопку «Settings» на панели инструментов, выберите во всплывающем окне: ① Установите имя корневого класса (например: User) и namespace (например: App\Models); ② Выберите стиль кода (ArrayObject / stdClass / readonly class); ③ Выберите стиль кода (typed properties / Laravel интеграция / Symfony Serializer); ④ Выберите стратегию именования полей (сохранить оригинал / camelCase / все нижний регистр / UPPER_SNAKE)
  3. Инструмент автоматически преобразует за 400 мс, справа отобразятся все сгенерированные PHP классы (каждый класс — независимый блок, заголовок отображает бейдж текущего стиля в реальном времени); при ошибке формата JSON отобразится кнопка «Исправить JSON»
  4. Проверьте, соответствуют ли сгенерированные имена классов, имена свойств, интерфейсы ожидаемым; если требуется корректировка, измените имена ключей в исходном JSON или снова откройте Settings для изменения опций
  5. Если устраивает, нажмите кнопку «Копировать» отдельного класса для вставки в IDE, или нажмите «Download ZIP» на панели инструментов для загрузки всех классов сразу (структура директорий по пути namespace)

Функции

  • Два стиля кода, свободно переключаемые: ArrayObject (наследует \ArrayObject, поддерживает доступ в стиле массива $obj['key']) / stdClass (наследует \stdClass, поддерживает доступ в стиле объекта $obj->key), совместимы с различными сценариями, такими как сериализация Laravel, WordPress REST, Symfony Serializer
  • Полный PHP шаблон: автоматически генерирует объявление namespace + use выражения + комментарий заголовка класса (Copyright + временная метка создания) + определение класса + типизированные public свойства (PHP 7.4+), можно напрямую подключать через require в проекты Composer без ручного написания шаблонного кода
  • Автоматическая реализация интерфейса JsonSerializable: каждый класс автоматически генерирует public function jsonSerialize(): mixed { return [...] }, можно напрямую сериализовать в JSON с json_encode() без дополнительного шаблонного кода
  • Опциональный readonly class PHP 8.1+: при включении сгенерированные классы получают final readonly class, все свойства становятся readonly, неизменяемы после создания, подходят для сценариев неизменяемых API response DTO
  • Умный вывод типов: string → string, integer → int, float → float, bool → bool, array → array, вложенные объекты → независимые классы, null → ?type (nullable свойства), не нужно вручную указывать типы полей
  • Автоматическое разделение вложенных классов: вложенные объекты используют имя поля с заглавной буквы для создания независимых PHP классов (например: address → Address), объекты в массивах именуются по правилу «удалить конечную s» (например: users → User), все вложенные классы также реализуют JsonSerializable
  • 4 стратегии именования полей: сохранить оригинал / преобразовать snake_case в camelCase (user_name → userName) / все в нижнем регистре / UPPER_SNAKE константный стиль, соответствует стандартам кода PSR-1 / Laravel / Symfony
  • Laravel интеграция в один клик: при выборе автоматически реализует интерфейсы Jsonable, Arrayable, добавляет методы toArray() / toJson(), можно напрямую использовать как Eloquent API Resource с автозагрузкой Composer
  • Копирование одного класса + ZIP скачивание нескольких файлов: каждый PHP класс имеет независимую кнопку «Копировать», также можно нажать «Скачать ZIP» на панели инструментов для загрузки ZIP-пакета (например: App/Models/User.php) со структурой по namespace, распакуйте и используйте сразу
  • Локальная работа в браузере + история: разбор JSON, генерация PHP классов, упаковка ZIP — всё выполняется в браузере на JavaScript (quicktype-core + JSZip), данные не загружаются ни на один сервер; встроенная localStorage история для последних 200 вводов

Примеры кода

PHP: Сериализация классов, сгенерированных этим инструментом, через json_encode()

php

PHP классы, сгенерированные этим инструментом, по умолчанию реализуют интерфейс JsonSerializable, напрямую выводят JSON с json_encode() без дополнительной обработки.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// 模拟从 API 接收到的 JSON 字符串
$jsonString = '{"id":1,"name":"Alice","email":"alice@example.com","isActive":true}';

// 1) 反序列化为本工具生成的类
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) 强类型访问字段(IDE 自动补全 + PHPStan 静态检查)
echo $user->name;          // Alice
echo $user->email;         // a****@***********example.com
echo $user->isActive ? '活跃' : '禁用'; // 活跃

// 3) json_encode() 自动调用 jsonSerialize(),无需任何额外代码
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "alice@example.com",
    "isActive": true
}
*/

PHP: Пример интеграции Laravel API Resource

php

После выбора Laravel интеграции классы, сгенерированные этим инструментом, можно напрямую использовать как Eloquent API Resource, форматируя ответы через toArray() / toJson().

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * GET /api/users/{id}
     */
    public function show(int $id): JsonResponse
    {
        // 1) 从数据库或外部 API 获取数据
        $userData = $this->fetchUserFromApi($id);

        // 2) 用本工具生成的 User 类包装
        $user = new User(
            $userData['id'],
            $userData['name'],
            $userData['email'],
            $userData['isActive']
        );

        // 3) 直接 return response()->json($user)
        //    Laravel 会自动调用 jsonSerialize()
        return response()->json($user);
    }

    /**
     * POST /api/users
     */
    public function store(Request $request): JsonResponse
    {
        // 4) 反向用法:把请求 JSON 反序列化为 User 类
        $user = User::fromArray($request->all());

        // 5) 用 toArray() 获取数组形式
        $payload = $user->toArray();

        // 6) 执行业务逻辑(如入库 / 调用第三方 API)
        $this->userService->create($payload);

        return response()->json([
            'message' => 'User created',
            'data' => $user,
        ], 201);
    }
}

/*
 * 对应 composer.json 依赖:
 * "require": {
 *     "php": "^8.1",
 *     "laravel/framework": "^11.0"
 * }
 */

PHP: Пример интеграции Symfony Serializer

php

Классы, сгенерированные в стиле ArrayObject этим инструментом, могут работать с компонентом Symfony Serializer для глубокой сериализации и десериализации, подходят для сложных слоёв API шлюзов.

<?php

namespace App\Service;

use App\Models\User;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;

class UserSerializer
{
    private SerializerInterface $serializer;

    public function __construct(SerializerInterface $serializer)
    {
        // 使用 PropertyNormalizer 处理 public 属性
        $this->serializer = $serializer;
    }

    /**
     * 将 User 对象序列化为 JSON 字符串
     */
    public function toJson(User $user): string
    {
        return $this->serializer->serialize($user, 'json');
    }

    /**
     * 将 JSON 字符串反序列化为 User 对象
     */
    public function fromJson(string $json): User
    {
        return $this->serializer->deserialize($json, User::class, 'json');
    }

    /**
     * 批量反序列化(如从 MongoDB 导出的 JSON 数组)
     */
    public function fromJsonArray(string $jsonArray): array
    {
        $users = [];
        $data = json_decode($jsonArray, true);

        foreach ($data as $item) {
            $users[] = User::fromArray($item);
        }

        return $users;
    }
}

// 使用示例
$serializer = new UserSerializer($serializerService);

$json = '{"id":1,"name":"Alice","address":{"city":"Beijing","zip":"100000"},"tags":["php","symfony"]}';

// 反序列化为本工具生成的 User 对象
$user = $serializer->fromJson($json);
echo $user->name;                  // Alice
echo $user->address->city;         // Beijing (强类型访问)
print_r($user->tags);              // ['php', 'symfony']

// 序列化回 JSON
$jsonOutput = $serializer->toJson($user);

Best Practices

В большинстве бэкенд проектов PHP классы, сгенерированные в стиле ArrayObject, поддерживают как доступ к массиву ($obj['key']), так и доступ к объекту ($obj->key), вместе с реализованным по умолчанию интерфейсом JsonSerializable, json_encode() автоматически вызывает массив, возвращаемый jsonSerialize(). Это самый распространённый способ написания объектов передачи данных в экосистеме PHP, совместим практически со всеми основными фреймворками как Laravel, Symfony, CodeIgniter.

readonly class, введённый в PHP 8.1+, — это лучшая практика для DTO: свойства неизменяемы после создания, предотвращают случайное изменение данных ответа бизнес-логикой; продвижение свойств конструктора делает код короче (public function __construct(public int $id, public string $name) {} завершает объявление свойств в одну строку). Рекомендуется перевести API response DTO, структуры WebHook callback, модели клиентов сторонних API на стиль readonly class.

Поля базы данных Laravel по умолчанию snake_case, но свойства PHP рекомендуются camelCase. Стратегия «Преобразовать в camelCase» этого инструмента автоматически преобразует, при этом ключи возвращаемого массива jsonSerialize() сохраняют исходный snake_case, делая вывод json_encode() всё ещё snake_case. Это соответствует привычкам доступа к моделям Laravel, сохраняя при этом API совместимость.

Сгенерированные ZIP-пакеты структурированы по пути пространства имён (например: App/Models/User.php). Настройте секцию autoload.psr-4 в composer.json, например: "App\\": "src/", затем выполните composer dump-autoload. Таким образом Composer автоматически сопоставит App\Models\User с src/Models/User.php без ручного require.

Этот инструмент по умолчанию создаёт typed properties (PHP 7.4+), позволяя полностью выводить типы свойств в режиме PHPStan --level=8. Рекомендуется интегрировать phpstan analyse ./src --level=8 в CI пайплайн для блокировки ошибок типов. Psalm также поддерживает PropertyTypeProvider для строгой проверки типов.

Этот инструмент работает полностью локально в браузере и не загружает никакие данные. Но выработайте привычку: ① Деидентифицируйте перед преобразованием JSON, содержащий API-ключи / токены / персональные данные пользователей; ② При использовании этого инструмента для крупных внутренних бизнес-структур (неопубликованные интерфейсы) убедитесь, что сетевое подключение разорвано; ③ Не коммитьте примеры данных с чувствительной информацией в публичные репозитории после генерации кода.

Вложенные JSON объекты рекурсивно создают независимые PHP классы. Когда уровень вложенности JSON превышает 6 слоёв (например: многоуровневые вложенные меню, деревья оргструктур, сложные бизнес-документы), количество генерируемых классов взрывается (N вложенных классов на слой), замедляя загрузку IDE и усложняя поддержку. Рекомендации: ① Разделите JSON на несколько модулей и преобразуйте отдельно; ② После генерации вручную рефакторите, используя индексацию массивов ($user['profile']['address']['city']) вместо вложенности классов.

Значения null JSON по умолчанию выводятся как ?mixed (nullable mixed), это безопасный откат, но не точный тип. Если известен тип поля (например: "nickname": "" выводит string), сначала дайте пример значения в исходном JSON, затем удалите пример значения после генерации и измените на точный тип как ?string, это значительно повысит точность статического анализа PHPStan.

Часто задаваемые вопросы

Как преобразовать JSON в PHP класс?

Вставьте содержимое JSON в левое поле ввода, инструмент автоматически преобразует за 400 мс; или нажмите кнопку «Convert» на панели инструментов. После преобразования справа отобразятся все сгенерированные PHP классы, каждый класс имеет независимую кнопку «Копировать»; также можно нажать «Download ZIP» на панели инструментов для загрузки всех классов, упакованных по структуре директорий namespace.

Какие структуры данных JSON поддерживаются?

Поддерживаются две структуры: ① JSON объект (используется как корневой класс, автоматически создаётся класс RootClass); ② JSON массив (первый объект массива используется как шаблон корневого класса). Все вложенные объекты рекурсивно обрабатываются как независимые классы; объекты в массивах рекурсивно обрабатываются как классы, соответствующие типу элемента массива.

Что включают сгенерированные PHP классы?

Каждый сгенерированный .php файл содержит: ① Комментарий в начале файла (Copyright + временная метка автогенерации); ② Объявление namespace; ③ Выражения use (автоматически импортирует \JsonSerializable / \ArrayAccess при необходимости); ④ Определение класса (ArrayObject / stdClass / readonly class согласно настройкам); ⑤ Реализуемые интерфейсы (JsonSerializable / Jsonable / Arrayable согласно настройкам); ⑥ Типизированные public свойства (PHP 7.4+); ⑦ Конструктор (назначение всех свойств согласно настройкам); ⑧ Методы jsonSerialize() / toArray() / toJson(). Полностью готовы к проверке синтаксиса php -l и подключению через require.

В чём разница между стилями ArrayObject и stdClass?

Стиль ArrayObject: сгенерированный класс наследует \ArrayObject, поддерживает как доступ по массиву $obj['key'], так и доступ по объекту $obj->key, возвращает объект при json_encode(). Стиль stdClass: сгенерированный класс наследует \stdClass, поддерживает только доступ по объекту $obj->key, легче, но нельзя напрямую обращаться как к массиву. Экосистема Laravel / WordPress по умолчанию использует стиль stdClass (поведение json_decode по умолчанию), Symfony Serializer по умолчанию использует стиль ArrayObject.

Поддерживается ли генерация Laravel API Resource?

Да. После выбора опции «Laravel интеграция в один клик» в настройках, инструмент автоматически генерирует реализацию интерфейсов Jsonable, Arrayable, добавляет методы toJson($options = 0) и toArray(); сгенерированные классы можно напрямую использовать в Eloquent API Resource (например: new UserResource($user) или $user->toArray()). Также автоматически подключает Illuminate\Contracts\Support\Jsonable и Illuminate\Contracts\Support\Arrayable через use.

Как выглядит код, сгенерированный в режиме PHP 8.1 readonly class?

После включения readonly class сгенерированный PHP класс значительно упрощается. Например, класс User с включённым readonly занимает около 12 строк: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Все свойства объявляются как readonly через продвижение свойств конструктора, неизменяемы после создания. Примечание: требуется проект PHP 8.1+, поля readonly могут назначаться только через конструктор.

Как преобразовать имена полей snake_case в camelCase?

Выберите режим «Преобразовать в camelCase» в группе «Стратегия именования полей» всплывающего окна Settings, инструмент автоматически преобразует имена полей JSON из snake_case в рекомендуемый стиль именования PHP. Примеры: user_name → userName, created_at → createdAt, is_active → isActive. Также при поступлении JSON из привязки маршрутов Laravel можно напрямую обращаться к свойствам класса через $request->userName без ручного промежуточного преобразования.

Как обрабатываются вложенные JSON объекты?

Инструмент автоматически создаёт независимые PHP классы для вложенных объектов. Правила именования: вложенные объекты используют ключ объекта с заглавной буквы как имя класса (например: address → Address), объекты в массивах именуются удалением конечной s с последующей заглавной буквой (например: users → User). Все вложенные классы также содержат полные поля, конструктор, метод jsonSerialize(), namespace совпадает с корневым классом, можно импортировать через use App\Models\Address.

Поля массивов автоматически преобразуются во что?

Да. Поля массивов в JSON автоматически преобразуются в свойство PHP array, тип элементов автоматически выводится из первого элемента. Примеры: ["a","b","c"] → array (аннотация array<string> в PHPDoc); [{...},{...}] → array (аннотация array<User> в PHPDoc, User — новый класс, именованный по ключу); пустой массив [] по умолчанию array (аннотация array<mixed> в PHPDoc). В PHP 8.0+ вы можете получать подсказки типов в IDE вместе с PHPDoc аннотациями.

Как изменить имя корневого класса и namespace?

В правом верхнем углу панели инструментов есть кнопка Settings; после нажатия откроется диалог настроек, где можно задать: ① Имя корневого класса (по умолчанию JsonRootClass); ② Namespace (по умолчанию App\Models). После изменения имена всех сгенерированных классов синхронно обновятся, структура директорий в ZIP также будет организована по namespace (например: App/Models/User.php).

Скачивание — это одиночный .php файл или ZIP-пакет?

Скачивание — это ZIP-пакет (User.zip), содержащий все сгенерированные PHP классы, структурированные по пути namespace. Например, при namespace App\Models структура файлов в ZIP: App/Models/User.php, App/Models/Address.php, App/Models/Company.php и т.д. Можно напрямую импортировать в директорию src проекта Composer командой unzip или через IDE.

Можно ли скопировать один класс напрямую в IDE?

Да. Каждый сгенерированный PHP класс отображается как независимый блок, в правом верхнем углу блока есть кнопка «Копировать»; после нажатия полный код класса (включая <?php + namespace + use + класс + свойства + конструктор + методы) будет скопирован в буфер обмена, можно напрямую вставить в IDE типа PhpStorm / VS Code / Sublime.

Как сделать, чтобы сгенерированные классы реализовывали интерфейс JsonSerializable?

Включено по умолчанию. Все сгенерированные PHP классы автоматически реализуют \JsonSerializable и создают метод public function jsonSerialize(): array { return [...] }; можно напрямую выводить JSON строку через echo json_encode($user) или использовать return response()->json($user) в Laravel.

Можно ли использовать классы, сгенерированные этим инструментом, в Symfony Serializer?

Да. Symfony Serializer по умолчанию использует стиль array для чтения данных, хорошо совместим с классами, сгенерированными в стиле ArrayObject. Можно напрямую сериализовать через $serializer->serialize($user, 'json') в SerializerInterface, при deserialize() требуются public свойства или getter в классе. Этот инструмент генерирует стиль public свойства + назначение в конструкторе, можно напрямую использовать с PropertyNormalizer Symfony Serializer.

Что делать при ошибках формата JSON?

Инструмент автоматически проверяет валидность JSON, при ошибке отображает красное уведомление об ошибке справа и предоставляет кнопку «Исправить JSON». После нажатия можно автоматически исправить распространённые ошибки: ① Лишние запятые в конце; ② Замена одинарных кавычек на двойные; ③ Дополнение кавычек для ключей без кавычек; ④ Удаление комментариев. После успешного исправления можно напрямую преобразовать для генерации PHP классов.

Данные загружаются на сервер? Безопасна ли конфиденциальность?

Полностью работает локально в браузере. Весь разбор JSON, генерация PHP классов, упаковка ZIP выполняются в браузере на JavaScript (quicktype-core + JSZip), введённые JSON данные и сгенерированный PHP код не загружаются ни на один сервер, не записываются, не кэшируются и не сохраняются в облаке. Можно смело использовать даже для чувствительного JSON с полями внутренних интерфейсов, неопубликованными бизнес-структурами, нераскрытыми API ответами, данные удаляются при закрытии страницы.

Медленно ли при генерации большого JSON на 10 000 строк?

Инструмент не имеет явного ограничения по количеству строк, но браузер будет медленно разбирать и отображать очень большой JSON. Рекомендации: ① Разделите JSON для пакетного преобразования; ② Концентрируйтесь на одном уровне вложенности за раз; ③ При необходимости массовой генерации более 100 классов рекомендуется напрямую использовать плагин PHP шаблонов IDE или написать простой скрипт quicktype CLI.

Поддерживают ли сгенерированные PHP классы версии ниже PHP 7.4?

Не полностью поддерживают. Классы, генерируемые этим инструментом, по умолчанию используют typed properties PHP 7.4+ (например: public int $id). Если ваш проект всё ещё на PHP 7.0~7.3, объявления типов вызовут проблемы совместимости. Рекомендации: ① Обновите проект до PHP 8.1+ (рекомендуется, лучше производительность и система типов); ② Или массово удалите объявления типов в IDE после генерации (Найти и заменить `public int ` → `public `); ③ Или используйте режим совместимости PHP 7.4 (этот инструмент по умолчанию устанавливает PHP 7.4 как минимальную версию).

Устранение неполадок

Отображается «Пожалуйста, введите данные JSON» или правая сторона пуста

Левое поле ввода пусто или содержит только пробельные символы. Убедитесь, что вставлено валидное содержимое JSON, или нажмите «Sample» для загрузки китайского примера, или нажмите «Upload» для выбора .json / .txt файлов.

Отображается «Unexpected token ... in JSON at position N»

Формат JSON невалиден. Распространённые причины: ① Лишние запятые в конце (например: {"a":1,}); ② Использованы одинарные кавычки вместо двойных; ③ Нотация JS объекта (например: {key: value}) вместо JSON (например: {"key": "value"}). Нажмите кнопку «Исправить JSON» для автоматического исправления некоторых ошибок.

Ошибка 'Typed property must not be accessed before initialization' в проекте PHP 7.x

Классы, сгенерированные этим инструментом, по умолчанию используют typed properties PHP 7.4+ (например: public int $id). Если ваш проект всё ещё на PHP 7.0~7.3, объявления типов вызовут проблемы совместимости. Решения: ① Обновите проект до PHP 8.1+ (рекомендуется, лучше производительность и система типов); ② Массово удалите объявления типов в IDE (Найти и заменить `public int ` → `public `); ③ Отключите опцию 'PHP 7.4 typed properties' (эффективно только для некоторых стилей кода).

Ошибка 'Cannot modify readonly property' в PHP 8.1 readonly class

Свойства, сгенерированные в стиле readonly class, не могут быть изменены после создания. При попытке $user->name = 'Bob' возникнет ошибка. Решения: ① Измените на стиль ArrayObject или stdClass (свойства изменяемы); ② Создайте новый экземпляр через new User(...) вместо изменения.

Не найден Illuminate\Contracts\Support\Jsonable в проекте Laravel

Стиль Laravel интеграции требует зависимость laravel/framework. Убедитесь, что в composer.json есть: "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Затем выполните composer update для установки зависимостей. Если не используете Laravel, выберите стиль ArrayObject или stdClass.

Сбой десериализации Symfony Serializer 'Cannot denormalize object'

Распространённые причины: ① В сгенерированном классе нет public свойств или getter методов (Symfony Serializer по умолчанию использует PropertyNormalizer); ② У класса нет конструктора без аргументов, но есть обязательные параметры. Решения: ① Убедитесь, что этот инструмент сгенерировал public свойства; ② Вручную сконструируйте объект через статический метод fromArray() и передайте Serializer.

Имя класса вложенного объекта не такое, как ожидалось (например: categories назван Categori)

Инструмент использует правило именования «удалить конечную s + заглавная буква» для объектов в массивах; для неправильных множественных чисел как categories это не дружелюбно. Рекомендации: ① Измените ключ исходного JSON на единственное число (например: categories → category); ② Переименуйте класс через Rename в IDE после генерации (одновременное изменение всех ссылок).

Неправильная структура директорий ZIP после скачивания и распаковки

Директории в ZIP организованы по настройке namespace (по умолчанию App/Models/). Если позиция неверна после распаковки: ① Измените имя namespace (например: на App\Dto) и скачайте заново; ② Укажите директорию распаковки через unzip -d src/; ③ Или напрямую File → Open всю распакованную папку в IDE.

Сгенерированные классы не автозагружаются

Проекту Composer требуется настроить сопоставление PSR-4 автозагрузки в composer.json, например: "autoload": { "psr-4": { "App\\": "src/" } }. Затем выполните composer dump-autoload, Composer автоматически загрузит файлы классов по сопоставлению namespace с директориями.

Имя поля для доступа изменилось после преобразования snake_case в camelCase

«Преобразовать в camelCase» изменяет имена свойств PHP (например: user_name → userName), но ключи массива в методе jsonSerialize() остаются исходными snake_case, JSON, выводимый json_encode(), всё ещё имеет исходные имена полей. Поэтому обращайтесь к свойству PHP через $user->userName, выводимый JSON всё ещё {"user_name": "..."}. Если при десериализации также нужен доступ по camelCase, измените ключи на camelCase в возвращаемом массиве jsonSerialize().

Страница тормозит при генерации более 100 вложенных классов

Инструмент не имеет явного ограничения по количеству классов, но производительность рендеринга очень большого DOM в браузере значительно снижается. Рекомендации: ① Разделите JSON на несколько независимых модулей и преобразуйте отдельно; ② Или напрямую используйте встроенные инструменты генерации кода IDE (например: плагин PhpStorm JSON to PHP); ③ Уровень вложенности рекомендуется не более 6 слоёв, иначе рекомендуется рефакторить структуру JSON.

Массив числового типа генерирует array<int>, а фактически array<float>

Инструмент выводит тип по первому элементу массива (например: [1, 2, 3] выводит int, [1.5, 2.5] выводит float). Если смешиваете целые и дробные числа (например: [1, 2.5]), инструмент выведет по первому элементу. Решения: ① Добавьте хотя бы один пример дробного элемента в исходный JSON (например: [0.0, 1.5]); ② Вручную скорректируйте тип в PHPDoc аннотации после генерации.

Поле со значением null сгенерировано как ?mixed вместо ?string

Значения null JSON по умолчанию выводятся инструментом как тип ?mixed (поскольку невозможно определить фактический тип). Это безопасная практика, избегающая ошибок. Если тип известен, дайте этому полю пример значения в исходном JSON (например: "field": "" выводит string), после генерации измените тип на ?string.

Классы всё ещё не автозагружаются после composer dump-autoload

Возможные причины: ① namespace не соответствует директории (например: namespace App\Models, но файл в src/Dto/); ② Неправильное psr-4 сопоставление в composer.json (например: "App\\": "src/Dto/" должно быть "App\\Dto\\": "src/Dto/"). Решения: проверьте, что namespace каждого .php файла строго соответствует пути директории (сегменты namespace должны равняться сегментам директорий, с учётом регистра).

PHPStan сообщает 'Property does not have default value'

Сгенерированные typed properties не имеют значений по умолчанию, PHPStan в режиме --level=8 считает их потенциально неинициализированными. Решения: ① Отключите строгие правила PHPStan; ② Назначьте пустые значения в конструкторе (например: $this->tags = []); ③ Используйте стиль readonly class (назначаются сразу после продвижения конструктора).

Сбой десериализации массива объектов Symfony Serializer

Для массивов объектов типа [{...},{...}] PropertyNormalizer нуждается в подсказках типа элементов. Решения: ① Явно укажите тип array<User> в PHPDoc; ② Или оберните через ArrayCollection ($users = new ArrayCollection()).

Китайские ключи генерируют имена свойств PHP со специальными символами

Когда исходный JSON содержит китайские ключи (например: "姓名": "Alice"), инструмент генерирует свойство public string $姓名; IDE может предупреждать о нестандартном именовании, но ошибки не будет. Рекомендации: ① Измените ключи JSON на английский (больше соответствует стандарту именования PHP PSR-1); ② При сохранении китайского убедитесь, что кодировка PHP файла UTF-8 (PHP по умолчанию UTF-8).

Несогласованность порядка вывода $obj['key'] и $obj->key в стиле ArrayObject

Доступ к массиву в стиле ArrayObject возвращает в порядке объявления свойств, доступ к объекту возвращает в порядке массива в методе jsonSerialize(). Если два порядка не совпадают, это приводит к тому, что вывод echo json_encode() не совпадает с var_dump($obj). Рекомендации: сохраняйте порядок возврата jsonSerialize() согласованным с порядком параметров конструктора.

Числовой ID в JSON WebHook callback превышает PHP_INT_MAX

int в PHP — это 64-битное знаковое целое число на 64-битных системах (максимальное значение 9223372036854775807); если числовой ID в JSON превышает этот диапазон (например: ID снежинок Twitter), он обрезается. Решения: ① Получайте ID как строковый тип ("id": "1234567890123456789"); ② Разбирайте с флагом JSON_BIGINT_AS_STRING.

Глоссарий

namespace
Механизм пространств имён, введённый в PHP 5.3+ для предотвращения конфликтов имён классов. Этот инструмент автоматически генерирует согласно установленному пользователем namespace и организует директории App/Models/ в ZIP.
class
Шаблон для определения объектов в PHP. То, что создаёт этот инструмент — стандартные PHP class, можно напрямую инстанцировать через new User(...).
ArrayObject
Класс стандартной библиотеки PHP SPL, реализующий интерфейсы как ArrayAccess. Классы, сгенерированные в стиле ArrayObject этим инструментом, наследуют \ArrayObject, поддерживают двойной доступ в стиле массива и объекта.
stdClass
Встроенный универсальный класс объектов PHP, json_decode($json, false) по умолчанию возвращает этот тип. Классы, сгенерированные в стиле stdClass этим инструментом, наследуют \stdClass, поддерживают только доступ в стиле объекта.
typed properties
Объявления типов свойств, введённые в PHP 7.4+ (например: public int $id). Свойства, генерируемые этим инструментом, по умолчанию содержат объявления типов, позволяя IDE и инструментам статического анализа напрямую проверять типы.
readonly class
Классы только для чтения, введённые в PHP 8.1+, все свойства в классе автоматически становятся readonly и не могут быть изменены после создания. Стиль readonly этого инструмента создаёт final readonly class, подходит для сценариев неизменяемых DTO.
JsonSerializable
Интерфейс, введённый в PHP 5.4+, объекты, реализующие этот интерфейс, автоматически вызывают метод jsonSerialize() при обработке json_encode(). Все классы этого инструмента автоматически реализуют этот интерфейс.
Jsonable (Laravel)
Контрактный интерфейс фреймворка Laravel, после реализации объект может вызывать toJson() для вывода JSON. Стиль Laravel интеграции этого инструмента автоматически реализует этот интерфейс.
Arrayable (Laravel)
Контрактный интерфейс фреймворка Laravel, после реализации объект может вызывать toArray() для вывода массива. Стиль Laravel интеграции этого инструмента автоматически реализует этот интерфейс.
Composer
Официальный инструмент управления зависимостями PHP. При использовании кода, сгенерированного этим инструментом, нужно настроить PSR-4 автозагрузку в composer.json (например: App\\: src/).
PSR-4
Стандарт автозагрузки, принятый PHP-FIG, загружает файлы классов через сопоставление пространство имён — директория. ZIP-пакеты, генерируемые этим инструментом, структурированы по пути пространства имён и соответствуют стандарту PSR-4.
Symfony Serializer
Фреймворк сериализации компонента Symfony. Классы, сгенерированные в стиле ArrayObject этим инструментом, могут использоваться с PropertyNormalizer Symfony Serializer для глубокой сериализации и десериализации.
Eloquent API Resource
Класс API ресурсов Laravel Eloquent, используется для форматирования API ответов. Классы, сгенерированные в стиле Laravel интеграции этим инструментом, могут напрямую использоваться как базовые классы API Resource.
composer.json
Файл конфигурации проекта Composer. После помещения кода, сгенерированного этим инструментом, в директорию src нужно настроить секцию autoload в composer.json и выполнить composer dump-autoload.
json_encode / json_decode
Встроенные функции PHP для сериализации и десериализации JSON. После реализации классом, сгенерированным этим инструментом, JsonSerializable, json_encode() автоматически вызывает метод jsonSerialize().
PHPUnit DataProvider
Механизм поставщиков данных фреймворка тестирования PHPUnit. PHP классы, сгенерированные этим инструментом, могут инъецироваться в тест-кейсы через DataProvider, повышая эффективность написания тестов с автодополнением IDE.
PHPStan
Инструмент статического анализа PHP, может проверять типы кода, обнаруживать ошибки. Классы, сгенерированные этим инструментом, имеют typed properties, поэтому могут полностью выводить типы свойств в режиме PHPStan --level=8.
Psalm
Ещё один инструмент статического анализа PHP с открытым исходным кодом от Vimeo. Классы, сгенерированные этим инструментом, могут выполнять строгую проверку типов с PropertyTypeProvider Psalm.
Doctrine
Набор инструментов ORM и DBAL в экосистеме PHP. PHP классы, сгенерированные этим инструментом, могут использоваться как основа для Doctrine Entity, затем вручную добавлять аннотации типа #[ORM\Column].
php -l
Команда проверки синтаксиса в командной строке PHP. Классы, сгенерированные этим инструментом, можно сначала проверить на синтаксис через php -l User.php, затем подключать в проект.
Composer dump-autoload
Команда Composer для пересоздания индекса автозагрузки. После помещения классов, сгенерированных этим инструментом, в директорию src нужно выполнить composer dump-autoload, чтобы PSR-4 автозагрузка их распознала.
JSON_THROW_ON_ERROR
Флаг обработки ошибок json_decode() в PHP 7.3+, при включении выбрасывает исключение JsonException при неудачном разборе JSON. Пример Laravel этого инструмента использует строгий разбор.
Hash (PHP)
Встроенная хеш-функция PHP, в основном используется для валидации WebHook. Классы WebHook callback, сгенерированные этим инструментом, используются для верификации подписи вместе с hash_hmac().

Быстрая таблица соответствия типов JSON типам PHP

Этот инструмент автоматически выводит соответствующие типы PHP по типу значения JSON; общие отношения сопоставления:

Пример значения JSONМетод определенияГенерируемый тип PHPЗначение по умолчанию свойства
nullvalue === null?mixed / ?typenull
true / falsetypeof value === 'boolean'boolfalse
42typeof value === 'number' && Number.isInteger(value)int0
3.14typeof value === 'number' && !Number.isInteger(value)float0.0
"hello"typeof value === 'string'string''
[...] (пустой массив)Array.isArray(value) && value.length === 0array (PHPDoc array<mixed>)[]
["a","b"]Array.isArray(value) && typeof value[0] === 'string'array (PHPDoc array<string>)[]
[1,2,3]Array.isArray(value) && typeof value[0] === 'number'array (PHPDoc array<int>)[]
[{...},{...}]Array.isArray(value) && typeof value[0] === 'object'array (PHPDoc array<Xxx>)[]
{...} (вложенный объект)typeof value === 'object' && !Array.isArray(value)Xxx (независимый класс)new Xxx()

Таблица сравнения 4 стилей кода PHP

4 стиля кода PHP классов, поддерживаемые инструментом, выбирайте согласно требованиям проекта:

Стиль кодаНаследование / модификаторРеализуемые интерфейсыСценарий применения
Стиль ArrayObjectextends \ArrayObjectimplements \JsonSerializableЭкосистема Symfony Serializer, требуется доступ в стиле массива $obj['key'], совместимость со стандартной библиотекой PHP
Стиль stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, совместимость с поведением json_decode по умолчанию, лёгкие объекты передачи данных
Стиль readonly classfinal readonly class (без наследования)implements \JsonSerializablePHP 8.1+, API response DTO, неизменяемые объекты передачи данных, гарантия невозможности изменения данных после создания
Стиль Laravel интеграцииБез наследования (по умолчанию)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, слой моделей Eloquent, форматирование ответов контроллеров

Privacy & Security

Все операции разбора JSON, генерации PHP классов, упаковки ZIP этого инструмента JSON to PHP выполняются полностью локально в вашем браузере на JavaScript (quicktype-core + JSZip); введённые JSON данные и сгенерированный PHP код не загружаются ни на один сервер, не записываются, не кэшируются и не сохраняются в облаке. Можно смело использовать даже для чувствительного JSON с полями внутренних интерфейсов, неопубликованными бизнес-структурами, нераскрытыми API ответами, все данные удаляются при закрытии страницы. Этот инструмент не использует никакие cookie для отслеживания пользователей, не собирает email или информацию об аккаунтах, не встраивает сторонние аналитические скрипты, все вычисления выполняются в процессе браузера текущего устройства. Даже в офлайн-среде (например, сетевое подключение разорвано или среда изолированной интрасети) можно нормально использовать после однократной загрузки ресурсов страницы.

Authoritative References