logo
GeekFormat

JSON を PHP に

無料のオンラインJSON to PHPツール。JSONをワンクリックで実行可能なPHPクラスに変換します。ArrayObjectとstdClassの2つのスタイルをサポートし、namespace、型付きプロパティ(PHP 7.4+)、オプションのreadonly class(PHP 8.1+)を自動生成し、JsonSerializableを実装。ネストされたオブジェクトは独立したクラスに自動分割され、配列はPHP arrayに自動変換されます。ブラウザでローカル実行、アップロード不要。

関連おすすめ

JSON to PHPクラスとPHPエンティティクラスモデリングについて

JSON to PHPツール(JSON to PHP Converter)は、JSONデータ構造を標準PHPクラスコードに自動変換する実用ツールです。開発者を手書きのnamespace / class / publicプロパティ / コンストラクタという繰り返し作業から解放し、特にAPIインターフェースドキュメントのサンプルJSONをComposerプロジェクトに直接requireできるPHPエンティティクラスに素早く変換するのに適しています。

このツールは4つの主流なコードスタイルをサポート:① ArrayObjectスタイル(\ArrayObjectを継承、配列アクセスとオブジェクトアクセスをサポート、Laravel / Symfony Serializerエコシステムで一般的);② stdClassスタイル(\stdClassを継承、オブジェクトアクセスのみをサポート、WordPress / json_decodeのデフォルト動作);③ readonly classスタイル(PHP 8.1+ final readonly class、構築後に不変、DTOに適する);④ Laravel統合スタイル(Jsonable + Arrayableを実装、Eloquent API Resourceと連携)。開発者はプロジェクトで使用するフレームワークに応じて自由に選択できます。

PHP型マッピングはJSON to PHPのコアです。ツールはJSONの基本型をPHPの標準型にマッピングします:文字列はstringに、整数はintに、浮動小数点はfloatに、ブール値はboolに、配列はarrayに、ネストされたオブジェクトは独立したclassに(フィールド名の先頭を大文字に)、nullは?type(null許容プロパティ)にマッピングされます。すべてのプロパティはPHP 7.4+の型付きプロパティで宣言され、IDEは直接型チェックを実行できます。

もう1つの差別化されたハイライトは「JsonSerializableインターフェースの自動実装」です:このツールが生成する各PHPクラスは自動的に\JsonSerializableを実装し、public function jsonSerialize(): mixed { return [...] }メソッドを生成します。これはecho json_encode($user)で直接JSON文字列を出力できることを意味し、json_encodeはjsonSerialize()が返す配列データを自動的に呼び出します。LaravelでJsonableインターフェースと組み合わせると、return response()->json($user)を直接使用でき、追加の処理は不要です。

JSONをサーバーにアップロードして処理する必要がある一部のオンラインツールとは異なり、このツールのすべての計算はブラウザ内で完了します。quicktype-coreはWeb Worker経由で読み込まれて実行され、JSON解析、型推論、PHPコード生成、ZIPパッケージングはすべてローカルで行われ、いかなるサーバーにもデータを送信しません。これはAPIキー、ユーザープライバシーフィールド、未リリースのビジネス構造を含むJSONにとって特に重要で、ページを閉じるとデータはメモリから消去されます。

生成されたコードは通常、Composerプロジェクトに配置して使用する必要があります。composer.jsonでPHPバージョンが要件を満たしていることを確認し(PHP 7.4+は型付きプロパティをサポート、PHP 8.1+はreadonly classをサポート)、生成されたクラスをsrcディレクトリにコピーし、namespace(PSR-4)でオートロードします。その後、json_decode($jsonString, false)またはjson_decode($jsonString, true) + 逆シリアル化でデータを消費し、PHPの型システムの利便性を享受できます。

ユースケース

  • Laravelバックエンド開発:APIインターフェースドキュメントのサンプルJSONを素早くEloquent Model / API Resourceクラスに変換し、Laravelの組み込みJsonable / Arrayableインターフェースと共にレスポンスを直接シリアライズ
  • Symfony Serializer統合:サードパーティAPIが返すJSONをArrayObjectスタイルのPHPクラスに変換し、Symfony Serializerで詳細なオブジェクトマッピングとデータ検証を行う
  • WordPress REST API:カスタムエンドポイントが返すJSON構造をstdClassスタイルのPHPクラスに変換し、wp_send_json()で直接出力、wp_json_encode()のデフォルト動作に適合
  • PHP 8.1+ readonly DTO:JSONをfinal readonly classに変換してデータ転送オブジェクト(DTO)として使用、構築後に不変でビジネスロジックがレスポンスデータを誤って変更することを防止
  • Composerパッケージ開発:JSON SchemaをPHPクラスに変換してからPackagistに公開しSDKモデル層として、他のComposerプロジェクトがrequireして再利用可能
  • 単体テストfixture:JSON fixtureをPHPクラスに変換し、json_decode + 逆シリアル化でテストデータ駆動を行い、構造化されたフィールドをアサーション
  • データ移行スクリプト:JSON設定ファイルをPHPクラスに変換してビジネスロジックで強く型付けされたアクセスに使用、配列アクセスよりもIDEの自動補完と型チェックが容易
  • フロントエンドMock連携:バックエンドが先にJSONモデルをPHPクラスに変換し、フロントエンドは対応するTypeScript interface / PHPクラスを同時に取得して両端の型を一貫させる
  • コードレビュー:APIレスポンスJSONを直接読みやすいPHPクラスに変換し、Code Review時のフィールド命名、プロパティ可視性の議論を容易に
  • レガシープロジェクトのリファクタリング:配列連想配列による動的アクセスのコードをPHPクラスベースの強い型付けアクセスにリファクタリングし、PHPStan / Psalmで静的分析を実施
  • PHPUnitデータプロバイダー:JSONテストデータをPHPクラスに変換してDataProvider経由でテストケースに注入、IDEがプロパティフィールドを自動提案
  • snake_caseバックエンドAPI接続:バックエンドAPIがsnake_caseフィールドを返す場合、フロントエンドPHPシステムで「camelCaseに変換」+ ArrayObjectスタイルを有効にしてシームレスに接続
  • PHPStan静的分析:生成されるクラスは当然型宣言を持ち、CIでphpstan analyse --level=8により型エラーを捕捉
  • 教育とトレーニング:PHP教育シナリオでサンプルJSONをPHPクラスに変換し、オブジェクト指向モデリング、型システム、インターフェース実装をデモ
  • API Gatewayゲートウェイ層:上流マイクロサービスが返すJSONをPHPクラスに変換してゲートウェイ層で集約し、下流のPHPサービスがクラスプロパティで強く型付けされたデータを消費
  • メッセージキュー消費:RabbitMQ / Kafkaから消費したJSONメッセージボディをPHPクラスに変換して入库または転送、JSON_THROW_ON_ERRORで厳密な解析を実施
  • EコマースSKU/SPUモデリング:商品JSON構造(マルチスペック/マルチ画像/マルチ属性)をPHPクラスに変換し、ArrayObjectスタイルと共にLaravelでN+1クエリ最適化を実施
  • WebHookコールバック署名検証:決済ゲートウェイ、物流コールバックのJSON署名検証構造をPHPクラスに変換し、hash_hmac()で署名チェックを実施
  • OpenAPIツールチェーン:OpenAPI 3.xのスキーマJSONをPHPクラスに変換し、Swagger Codegen / ApifoxのPHPクライアント生成フローに接続
  • データETLパイプライン:上流データソース(MySQL JSONフィールド / MongoDB / Elasticsearch)のJSONをPHPクラスに変換してデータクレンジングと入库を実施

使い方

  1. 左側のエディタにJSONオブジェクト(推奨)または配列を貼り付けるか、「Sample」をクリックして日本語サンプルをロード(ネストされたaddress / company / tagsを含む)
  2. ツールバーの「Settings」ボタンをクリックし、ポップアップで以下を選択:① ルートクラス名(例:User)とnamespace(例:App\Models)を設定;② コードスタイルを選択(ArrayObject / stdClass / readonly class);③ コード機能を選択(型付きプロパティ / Laravel統合 / Symfony Serializer);④ フィールド命名戦略を選択(元のまま / camelCase / すべて小文字 / UPPER_SNAKE)
  3. ツールは400ms以内に自動変換し、右側にすべての生成されたPHPクラスを表示(各クラスは独立したカード、タイトルバーに現在のスタイルバッジをリアルタイム表示);JSON形式エラーがある場合は「JSONを修復」ボタンを表示
  4. 生成されたクラス名、プロパティ名、インターフェースが期待通りか確認;調整が必要な場合はソースJSONのキー名を変更するかSettingsを再オープンしてオプションを変更
  5. 満足したら、個々のクラスの「コピー」ボタンをクリックしてIDEに貼り付けるか、ツールバーの「Download ZIP」をクリックしてすべてのクラスをワンクリックでダウンロード(namespaceパスに従ってディレクトリ構造で整理)

特徴

  • 2つのコードスタイルを自由に切り替え:ArrayObject(\ArrayObjectを継承、$obj['key']配列形式アクセスをサポート)/ stdClass(\stdClassを継承、$obj->keyオブジェクト形式アクセスをサポート)、Laravelシリアライゼーション、WordPress REST、Symfony Serializerなど様々なシナリオに対応
  • 完全なPHPテンプレート:namespace宣言 + use文 + クラスヘッダーコメント(Copyright + 生成タイムスタンプ)+ クラス定義 + 型付きpublicプロパティ(PHP 7.4+)を自動生成、手動でボイラープレートを補うことなくComposerプロジェクトに直接require可能
  • JsonSerializableインターフェースを自動実装:各クラスにpublic function jsonSerialize(): mixed { return [...] }を自動生成、json_encode()で直接JSONシリアライズ可能、追加のボイラープレートコードは不要
  • PHP 8.1+ readonly classオプション:有効にすると生成されるクラスにfinal readonly classを追加、すべてのプロパティがreadonlyになり構築後に不変、APIレスポンスDTOの不変シナリオに最適
  • スマートな型推論:string → string、integer → int、float → float、bool → bool、array → array、ネストされたオブジェクト → 独立したクラス、null → ?type(null許容プロパティ)、フィールド型を手動で指定する必要なし
  • ネストされたクラスを自動分割:ネストされたオブジェクトはフィールド名の先頭を大文字にして独立した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()メソッドを追加、Composerオートロードと共にEloquent API Resourceとして直接使用可能
  • 単一クラスのコピー + ZIP複数ファイルダウンロード:各PHPクラスに独立した「コピー」ボタン、namespaceディレクトリ構造で整理されたZIPパッケージをワンクリックでダウンロード(例:App/Models/User.php)、解凍してすぐ使用可能
  • ブラウザローカル実行 + 履歴:JSON解析、PHPクラス生成、ZIPパッケージングはすべてJavaScript(quicktype-core + JSZip)でブラウザ内で完了、データはサーバーにアップロードされません;最近の200件の入力をlocalStorageに履歴保存

コード例

PHP:json_encode()でツール生成クラスをシリアライズ

php

このツールで生成されたPHPクラスはデフォルトでJsonSerializableインターフェースを実装しており、json_encode()でJSONを直接出力、追加の処理は不要です。

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// 模拟从 API 接收到的 JSON 字符串
$jsonString = '{"id":1,"name":"Alice","email":"a****@***********","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****@***********
echo $user->isActive ? '活跃' : '禁用'; // 活跃

// 3) json_encode() 自动调用 jsonSerialize(),无需任何额外代码
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "a****@***********",
    "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などほぼすべての主流フレームワークと互換性があります。

PHP 8.1+で導入されたreadonly classはDTOのベストプラクティスです:構築後にプロパティが不変で、ビジネスロジックがレスポンスデータを誤って変更することを防ぎます;コンストラクタプロモーションによりコードがより簡潔になります(public function __construct(public int $id, public string $name) {} の1行でプロパティ宣言が完了)。APIレスポンスDTO、WebHookコールバック構造、サードパーティAPIクライアントモデルをreadonly classスタイルに変更することを推奨します。

Laravelデータベースフィールドはデフォルトでsnake_caseですが、PHPプロパティはcamelCaseを推奨します。このツールの「camelCaseに変換」戦略は自動的に変換し、jsonSerialize()のreturn配列キーは元のsnake_caseを保持してjson_encode()出力が依然としてsnake_caseになります。これによりLaravelモデルアクセスの慣習に準拠しつつ、API互換性も維持されます。

生成されたZIPパッケージはnamespaceパスで整理されます(例:App/Models/User.php)。composer.jsonでautoload.psr-4セクションを設定します、例:"App\\": "src/"、次にcomposer dump-autoloadを実行します。これによりComposerがApp\Models\Userをsrc/Models/User.phpに自動マッピングし、手動requireが不要になります。

このツールはデフォルトで型付きプロパティ(PHP 7.4+)を生成し、PHPStanの--level=8モードでプロパティ型を完全に推論できます。CIパイプラインにphpstan analyse ./src --level=8を統合して型エラーを捕捉することを推奨します。PsalmもPropertyTypeProviderをサポートして強い型検証が可能です。

このツールは完全にブラウザローカルで実行され、いかなるデータもアップロードしません。しかし習慣をつけましょう:① APIキー/トークン/ユーザープライバシーを含むJSONは変換前に脱感作する;② 大規模な内部ビジネス構造(未リリースインターフェース)にこのツールを使用するときはネットワーク接続が切断されていることを確認;③ コード生成後に機密情報を含むサンプルデータを公開リポジトリにコミットしない。

ネストされたJSONオブジェクトは再帰的に独立したPHPクラスを生成します。JSONのネストレベルが6層を超えると(例:多階層ネストメニュー、組織図ツリー、複雑なビジネスドキュメント)、生成されるクラス数が爆発し(層ごとにN個のネストクラス)、IDEの読み込みが遅くなり保守が困難になります。推奨:① JSONを複数のモジュールに分割して個別に変換;② または生成後に配列インデックス($user['profile']['address']['city'])に手動でリファクタリングしてクラスネストの代わりに使用。

JSON null値はデフォルトで?mixed(null許容mixed)として推論されますが、これは安全なフォールバックですが正確な型ではありません。フィールドの型が分かっている場合(例:"nickname": ""はstringを推論)、最初にソースJSONにサンプル値を与え、生成後にサンプル値を削除してから?stringのような正確な型に変更すると、PHPStan静的分析の精度が大幅に向上します。

よくある質問

JSONをPHPクラスに変換するにはどうすればよいですか?

左側の入力ボックスにJSONコンテンツを貼り付けると、ツールは400ms以内に自動変換します;またはツールバーの「Convert」ボタンをクリックします。変換完了後、右側にすべての生成されたPHPクラスが表示され、各クラスには独立した「コピー」ボタンがあります;ツールバーの「Download ZIP」をクリックすると、すべてのクラスを(namespaceディレクトリ構造を含めて)ワンクリックでパッケージ化してダウンロードできます。

どのようなJSONデータ構造をサポートしていますか?

2つの構造をサポート:① JSONオブジェクト(ルートクラスとして、class RootClassを自動生成);② JSON配列(配列の最初のオブジェクトをルートクラスのテンプレートとして使用)。すべてのネストされたオブジェクトは再帰的に独立したクラスに処理されます;配列内のオブジェクトは配列要素型に対応するクラスに再帰的に処理されます。

生成されるPHPクラスには何が含まれますか?

生成される各.phpファイルには以下が含まれます:① ファイルヘッダーコメント(Copyright + 自動生成タイムスタンプ);② namespace宣言;③ use文(必要に応じて\JsonSerializable / \ArrayAccessなどを自動インポート);④ クラス定義(設定に応じてArrayObject / stdClass / readonly class);⑤ implementsするインターフェース(設定に応じて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クラスは大幅に簡素化されます。例えばclass 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に変換するにはどうすればよいですか?

Settingsポップアップの「フィールド命名戦略」グループで「camelCaseに変換」モードを選択すると、ツールは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>と注釈);[{...},{...}] → array(コメントでarray<User>と注釈、Userはキーから命名された新しいクラス);空配列[]はデフォルトでarray(コメントでarray<mixed>と注釈)。PHP 8.0+でPHPDocアノテーションを使用するとIDEで型ヒントを得られます。

ルートクラス名とnamespaceを変更するにはどうすればよいですか?

ツールバーの右上にSettingsボタンがあり、クリックすると設定ダイアログが開き、以下を設定できます:① ルートクラス名(デフォルトJsonRootClass);② namespace(デフォルトApp\Models)。変更後、すべての生成されるクラス名が同期して更新され、ZIP内のディレクトリ構造もnamespaceに従って整理されます(例:App/Models/User.php)。

ダウンロードは単一の.phpファイルですか、それともZIPパッケージですか?

ダウンロードはZIPパッケージ(User.zip)で、namespaceパスに従ってディレクトリ構造で整理されたすべての生成されたPHPクラスが含まれます。例えばnamespaceがApp\Modelsの場合、ZIP内のファイル構造は:App/Models/User.php、App/Models/Address.php、App/Models/Company.phpなど。unzipコマンドまたはIDEでComposerプロジェクトのsrcディレクトリに直接インポートできます。

単一のクラスを直接IDEにコピーできますか?

はい。各生成されたPHPクラスは独立したカードとして表示され、カードの右上に「コピー」ボタンがあります。クリックするとクラス全体の完全なコード(<?php + namespace + use + クラス + プロパティ + コンストラクタ + メソッドを含む)がクリップボードにコピーされ、PhpStorm / VS Code / SublimeなどのIDEに直接貼り付けることができます。

生成されるクラスにJsonSerializableインターフェースを実装させるにはどうすればよいですか?

デフォルトで有効になっています。すべての生成されるPHPクラスは自動的に\JsonSerializableを実装し、public function jsonSerialize(): array { return [...] }メソッドを生成します。returnされる配列はクラスプロパティの順序で組み立てられます。echo json_encode($user)で直接JSON文字列を出力でき、Laravelではreturn response()->json($user)が使用できます。

Symfony Serializerはこのツールで生成されたクラスを使用できますか?

はい。Symfony Serializerはデフォルトで配列スタイルでデータを読み取り、ArrayObjectスタイルで生成されたクラスと良好に互換性があります。SerializerInterfaceの$serializer->serialize($user, 'json)で直接シリアライズできます;deserialize()での逆シリアル化にはクラスにpublicプロパティまたはgetterが必要です。このツールが生成するのはpublicプロパティ + コンストラクタ代入スタイルで、Symfony SerializerのPropertyNormalizerで直接使用できます。

JSON形式エラーがある場合はどうすればよいですか?

ツールはJSONの正当性を自動的に検出し、エラー時には右側に赤いエラーメッセージを表示し、「JSONを修復」ボタンを提供します。クリックすると一般的なエラーを自動修復できます:① 末尾の余分なカンマ;② 単一引用符を二重引用符に置換;③ 引用符のないキーに引用符を補完;④ コメントの除去。修復が成功したら直接変換してPHPクラスを生成できます。

データはサーバーにアップロードされますか?プライバシーは安全ですか?

完全にブラウザローカルで実行されます。すべてのJSON解析、PHPクラス生成、ZIPパッケージングはブラウザ内でJavaScript(quicktype-core + JSZip)によって完了し、入力されたJSONデータと生成されたPHPコードはいかなるサーバーにもアップロードされず、クラウドに記録またはキャッシュされることもありません。内部インターフェースフィールド、未リリースのビジネス構造、未公開のAPIレスポンスを含む機密JSONも安心して使用でき、ページを閉じるとすべてのデータが消去されます。

1万行の大きなJSONを生成すると重くなりますか?

ツールに明示的な行数制限はありませんが、ブラウザによる超大きなJSONの解析とレンダリングは遅くなります。推奨:① JSONを分割してバッチ変換;② 一度に1つのネストレベルに注目;③ 100+クラスを一括生成する必要がある場合は、IDEのPHPテンプレートプラグインを直接使用するか、シンプルなquicktype CLIスクリプトを書くことをお勧めします。

生成されるPHPクラスはPHP 7.4未満のバージョンをサポートしていますか?

完全にはサポートしていません。このツールが生成するクラスはデフォルトで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を修復」ボタンをクリックすると一部のエラーを自動修復できます。

PHP 7.xプロジェクトで「Typed property must not be accessed before initialization」エラーが発生

このツールが生成するクラスはデフォルトでPHP 7.4+の型付きプロパティ(public int $idなど)を使用します。プロジェクトがまだPHP 7.0~7.3の場合、型宣言により互換性の問題が発生します。解決方法:① プロジェクトをPHP 8.1+にアップグレード(推奨、パフォーマンスと型システムがより良い);② IDEで型宣言を一括削除(検索と置換で`public int ` → `public `);③ 「PHP 7.4 typed properties」オプションのチェックを外す(一部のコードスタイルにのみ適用)。

PHP 8.1 readonly classで「Cannot modify readonly property」エラー

readonly classスタイルで生成されたプロパティは構築後に変更できません。$user->name = 'Bob'を試みるとエラーが発生します。解決方法:① ArrayObjectまたはstdClassスタイルに変更(プロパティ変更可能);② または変更する代わりにnew User(...)で新しいインスタンスを作成。

LaravelプロジェクトでIlluminate\Contracts\Support\Jsonableが見つからない

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);② または生成後にIDEの名前変更機能でクラス名を変更(すべての参照を同時に修正)。

ダウンロードしたZIPの解凍後のディレクトリ構造が正しくない

ZIP内のディレクトリはnamespace設定(デフォルトApp/Models/)に従って整理されます。解凍後の位置が正しくない場合:① namespace名を変更(例:App\Dtoに)して再ダウンロード;② unzip -d src/で解凍ディレクトリを指定;③ またはIDEで直接ファイル → 解凍したフォルダ全体を開く。

生成されたクラスがオートロードされない

Composerプロジェクトはcomposer.jsonでPSR-4オートロードマッピングを設定する必要があります、例:"autoload": { "psr-4": { "App\\": "src/" } }。次にcomposer dump-autoloadを実行すると、Composerがnamespace-ディレクトリマッピングでクラスファイルを自動ロードします。

snake_caseをcamelCaseに変換後、フィールド名アクセスが変わる

「camelCaseに変換」はPHPプロパティ名を変更しますが(例:user_name → userName)、jsonSerialize()メソッドのreturn配列キーは元のsnake_caseを保持し、json_encode()が出力するJSONは元のフィールド名のままです。したがってPHPプロパティにアクセスするときは$user->userNameを使用し、JSON出力は依然として{"user_name": "..."}です。逆シリアル化でもcamelCaseでアクセスしたい場合は、jsonSerialize()のreturn配列でキーをcamelCaseに変更する必要があります。

100+個のネストされたクラス生成時にページが重くなる

ツールに明示的なクラス数制限はありませんが、ブラウザが非常に大きなDOMをレンダリングする性能は大幅に低下します。推奨:① JSONを複数の独立したモジュールに分割して個別に変換;② またはIDE内蔵のコード生成ツール(PhpStormのJSON to PHPプラグインなど)を直接使用;③ ネストレベルは6層を超えないことを推奨し、それを超える場合はJSON構造のリファクタリングを推奨。

配列が数値型だがarray<float>ではなくarray<int>が生成される

ツールは配列の最初の要素で型を推論します(例:[1, 2, 3]はint、[1.5, 2.5]はfloatと推論)。整数と浮動小数点数を混合した場合(例:[1, 2.5])、ツールは最初の要素で推論します。解決:① ソースJSONにサンプル浮動小数点要素を少なくとも1つ追加(例:[0.0, 1.5]);② または生成後にPHPDocアノテーションの型を手動で調整。

null値フィールドが?stringではなく?mixed型で生成される

JSON null値は実際の型を判定できないため、ツールがデフォルトで?mixed型として推論します。これは誤判定を避ける安全な方法です。型が分かっている場合は、ソースJSONでそのフィールドにサンプル値を与え(例:"field": ""はstringを推論)、生成後に型を?stringに変更してください。

composer dump-autoload後もクラスがオートロードされない

考えられる原因:① namespaceとディレクトリが一致していない(例:namespace App\Modelsだがファイルがsrc/Dto/にある);② composer.jsonのpsr-4マッピングが間違っている(例:"App\\": "src/Dto/"は"App\\Dto\\": "src/Dto/"であるべき)。解決:各.phpファイルのnamespaceがディレクトリパスと厳密に対応していることを確認(namespaceセグメントはディレクトリセグメントと等しく、大文字小文字を区別)。

PHPStanが「Property does not have default value」を通知

生成された型付きプロパティにはデフォルト値がないため、PHPStanが--level=8モードで未初期化の可能性があると見なします。解決:① PHPStan strict rulesを無効化;② コンストラクタで空の値を代入(例:$this->tags = []);③ readonly classスタイルを使用(コンストラクタプロモーション後に即座に代入)。

Symfony Serializerオブジェクト配列の逆シリアル化が失敗

[{...},{...}]のようなオブジェクト配列の場合、PropertyNormalizerには要素型ヒントが必要です。解決:① PHPDocでarray<User>型を明示;② またはArrayCollectionでラップ($users = new ArrayCollection())。

中国語キーが特殊文字を含むPHPプロパティ名を生成する

ソースJSONに中国語キーが含まれる場合(例:"姓名": "Alice")、ツールはpublic string $姓名プロパティを生成し、IDEが命名規則違反を通知する場合がありますがエラーは発生しません。推奨:① JSONキーを英語に変更(PHP PSR-1命名規則により適合);② 中国語を保持する場合、PHPファイルのエンコーディングがUTF-8であることを確認(PHPはデフォルトUTF-8)。

ArrayObjectスタイルで$obj['key']と$obj->keyの出力順序が一致しない

ArrayObjectスタイルの配列アクセスはプロパティ宣言順で返し、オブジェクトアクセスはjsonSerialize()メソッドのreturn配列順で返します。2つの順序が一致しないとecho json_encode()の出力がvar_dump($obj)と一致しなくなります。推奨:jsonSerialize()のreturn順序をコンストラクタパラメータ順序と一致させる。

WebHookコールバックJSONの数値IDがPHP_INT_MAXを超える

PHPのintは64ビットシステムでは64ビット符号付き整数(最大値9223372036854775807)です;JSONの数値IDがこの範囲を超えると(例:TwitterスノーフレークID)切り詰められます。解決:① IDを文字列型で受信("id": "1234567890123456789");② JSON_BIGINT_AS_STRINGフラグでパース。

用語集

namespace
PHP 5.3+で導入された名前空間メカニズムで、クラス名の衝突を回避します。このツールはユーザーが設定したnamespaceに基づいて自動生成し、ZIP内でApp/Models/ディレクトリに整理します。
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+で導入されたインターフェース。このインターフェースを実装したオブジェクトはjson_encode()時にjsonSerialize()メソッドを自動的に呼び出します。このツールのすべてのクラスはこのインターフェースを自動実装します。
Jsonable (Laravel)
Laravelフレームワークのコントラクトインターフェース。実装するとオブジェクトはtoJson()を呼び出してJSONを出力できます。このツールのLaravel統合スタイルはこのインターフェースを自動実装します。
Arrayable (Laravel)
Laravelフレームワークのコントラクトインターフェース。実装するとオブジェクトはtoArray()を呼び出して配列を出力できます。このツールのLaravel統合スタイルはこのインターフェースを自動実装します。
Composer
PHP公式の依存管理ツール。このツールで生成したコードを使用する場合、composer.jsonでPSR-4オートロードを設定する必要があります(例:App\\: src/)。
PSR-4
PHP-FIGによって策定されたオートロード規格で、名前空間からディレクトリへのマッピングでクラスファイルを読み込みます。このツールが生成するZIPパッケージはnamespaceパスで整理されており、PSR-4規格に準拠しています。
Symfony Serializer
Symfonyコンポーネントのシリアライゼーションフレームワーク。このツールのArrayObjectスタイルで生成されたクラスは、Symfony SerializerのPropertyNormalizerと共に詳細なシリアライゼーションと逆シリアライゼーションに使用できます。
Eloquent API Resource
Laravel EloquentのAPIリソースクラスで、APIレスポンスをフォーマットするために使用されます。このツールのLaravel統合スタイルで生成されたクラスはAPI Resource基底クラスとして直接使用できます。
composer.json
Composerプロジェクトの設定ファイル。このツールで生成したコードをsrcディレクトリに配置した後、composer.jsonのautoloadセクションを設定してcomposer dump-autoloadを実行する必要があります。
json_encode / json_decode
PHPに組み込まれたJSONシリアライゼーションと逆シリアライゼーション関数。このツールが生成するクラスがJsonSerializableを実装すると、json_encode()はjsonSerialize()メソッドを自動的に呼び出します。
PHPUnit DataProvider
PHPUnitテストフレームワークのデータプロバイダーメカニズム。このツールが生成するPHPクラスはDataProviderとしてテストケースに注入でき、IDEの自動補完でテスト作成効率を向上させます。
PHPStan
PHPの静的分析ツールで、コードの型チェック、エラー検出を行います。このツールが生成するクラスは型付きプロパティを持つため、PHPStanの--level=8モードでプロパティ型を完全に推論できます。
Psalm
Vimeoによってオープンソース化された別のPHP静的分析ツール。このツールが生成するクラスはPsalmのPropertyTypeProviderで強い型検証を実行できます。
Doctrine
PHPエコシステムのORMとDBALツールセット。このツールが生成するPHPクラスはDoctrine Entityのスケルトンとして使用でき、その後手動で#[ORM\Column]などのアノテーションを追加します。
php -l
PHPコマンドラインの構文チェック命令。このツールが生成するクラスは、プロジェクトにrequireする前にphp -l User.phpで構文検証を実行できます。
Composer dump-autoload
Composerがオートロードインデックスを再生成するコマンド。このツールが生成するクラスをsrcディレクトリに配置した後、composer dump-autoloadを実行してPSR-4オートロードに認識させる必要があります。
JSON_THROW_ON_ERROR
PHP 7.3+のjson_decode()エラー処理フラグ。有効にするとJSON解析の失敗時にJsonException例外をスローします。このツールのLaravel例では厳密な解析を使用しています。
Hash (PHP)
PHPに組み込まれたハッシュ関数で、WebHook署名検証によく使用されます。このツールが生成するWebHookコールバッククラスはhash_hmac()と共に署名チェックを行います。

JSON型からPHP型へのマッピング早見表

ツールが自動推論するJSONデータ型と対応するPHP型の対照:

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()

PHP 4コードスタイル比較表

ツールがサポートする4つのPHPクラスコードスタイル。プロジェクトの要件に応じて選択:

コードスタイル継承 / 修飾子実装インターフェース適用シナリオ
ArrayObjectスタイルextends \ArrayObjectimplements \JsonSerializableSymfony Serializerエコシステム、$obj['key']配列アクセスが必要、PHP標準ライブラリ互換
stdClassスタイルextends \stdClassimplements \JsonSerializableWordPress REST API、json_decodeデフォルト動作互換、軽量オブジェクトデータキャリア
readonly classスタイルfinal readonly class (継承なし)implements \JsonSerializablePHP 8.1+、APIレスポンスDTO、不変データ転送オブジェクト、構築後にデータが変更されないことを保証
Laravel統合スタイル継承なし(デフォルト)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource、Eloquentモデル層、コントローラーレスポンスのフォーマット

Privacy & Security

このJSON to PHPツールのすべてのJSON解析、PHPクラス生成、ZIPパッケージング操作は完全にお使いのブラウザでJavaScript(quicktype-core + JSZip)によりローカルで完了します;入力されたJSONデータと生成されたPHPコードはいかなるサーバーにもアップロードされず、クラウドに記録、キャッシュ、または保存されることもありません。内部インターフェースフィールド、未リリースのビジネス構造、未公開のAPIレスポンスを含む機密JSONも安心して使用でき、ページを閉じるとすべてのデータが消去されます。このツールはユーザートラッキングのためにCookieを使用せず、メールアドレスやアカウント情報を収集せず、第三者の分析スクリプトを埋め込まず、すべての計算は現在のデバイスのブラウザプロセスで完了します。オフライン環境(ネットワーク切断時やイントラネット分離環境など)でも、ページリソースが一度読み込まれていれば正常に使用できます。

Authoritative References