Tool Kumarのツール

JSONをPHPのクラスに変換

コンストラクターでプロモートされた型付きreadonlyプロパティを持つ、PHP 8.1以降向けのクラスを生成します。各クラスには、元のJSONキーを対応付けてネストしたオブジェクトを組み立てるfromArrayメソッドがあります。

このツールの使い方

  1. フィールドが異なるレコードも含めて、代表的なレスポンスを貼り付けます。
  2. 生成された出力を確認し、必要に応じてルート名を変更します。
  3. コードをコピーまたはダウンロードし、型がAPI仕様と合っているか確認します。

実行例

この出力は組み込みの変換機能で生成したものです。2つのitemのpriceからは浮動小数点数のフィールドが、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の連想配列が必要なだけなら、trueを指定したjson_decodeで十分です。生成したモデルを使う場合は、その配列を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が必要ですか?
コンストラクターでプロモートされたreadonlyプロパティを使うため、PHP 8.1以降が必要です。出力では、型付きプロパティ、名前付き引数、strict_typesも使っています。
ネストしたオブジェクトはどのようにクラスになりますか?
fromArrayが、ネストしたクラスのfromArrayメソッドを呼び出します。ネストしたオブジェクトの配列にはarray_mapを使い、要素の型はPHPDocに記録されます。
JSONにエンコードし直すときもキーは保持されますか?
fromArrayメソッドは入力時の対応付けを保持します。出力には独自のエンコーダーがないため、これらのオブジェクトにjson_encodeを使うとプロパティ名が使われます。元のJSONキーが必要な場合は、JsonSerializableかtoArrayメソッドを追加してください。

関連ツール

JSONをPythonのモデルに変換、JSONをJavaのrecordに変換、JSON Schema生成。