JSON から TypeScript / Go / Rust 構造体ジェネレーター

JSON を貼り付けて、ターゲット言語を選択すると、慣用的な型定義が生成されます。TypeScript、Go、Rust、Kotlin、Java、C#、Python TypedDict をサポート。quicktype 駆動、ブラウザ上で動作。

  1. 左側のテキストエリアに代表的な JSON サンプルを貼り付けます。
  2. ターゲットドロップダウンからターゲット言語を選びます。
  3. 生成をクリック。最初のクリックでエンジンを読み込み(4G で約 2–3 秒);その後の生成は瞬時です。
  4. 結果をコピーするか、適切なファイル拡張子でダウンロードします。
何ができるのか?

1 つ以上の JSON サンプルからスキーマを推論し、ターゲット言語で慣用的な型を生成します。フィールド型は推論されます — 文字列は文字列のまま、数値は言語の数値型、ブール値は bool、配列はスライス/リスト/配列、ネストされたオブジェクトはネストされた型になります。サンプル間で時々 null または欠けているオプショナルフィールドは、出力で nullable としてマークされます。quicktype.io の背後にあるのと同じ quicktype-core エンジンによって動作します。

JSON 入力:

{
  "name": "Ada",
  "age": 36,
  "active": true,
  "tags": ["math", "logic"]
}

TypeScript 出力(ターゲット = TypeScript、型名 = User):

export interface User {
  name: string;
  age: number;
  active: boolean;
  tags: string[];
}

よくある落とし穴と対処法

JSON からの型推論には根本的な限界があります — JSON には型システムを完全に制約するための情報が十分にありません。以下のパターンは、推論された型が望むものと一致しない場合をカバーします。

  • 単一サンプルからのオプショナル vs. 必須。 単一の JSON オブジェクトでは、ジェネレーターはどのフィールドがオプショナルかを判断できません。複数のサンプルを提供してください(代表的なオブジェクトの JSON 配列を貼り付け)。これにより、ジェネレーターは時々欠けているフィールドをオプショナルとしてマークできます。
  • 空の配列。 `{"items": []}` は `any` の配列を生成します — ジェネレーターには推論する要素がありません。少なくとも 1 つの中身のある例を含めるか、生成後に手動で型を修正してください。
  • 異種混合の配列要素。 JSON 配列 `[1, "two"]` はユニオン型になります — 一部のターゲット言語(特に Go)では結果が使いにくいかもしれません。実データで配列が同種であるべきなら、サンプルを修正してください。
  • 日付文字列。 JSON には Date 型がありません。ISO 8601 日付文字列は `string` として推論されます。quicktype は TypeScript 出力で時々 Date として検出することがあります — より強力な型付けが必要なら手動で調整してください。
  • 精度を失う数値 ID。 2^53 を超える JSON 数値(大きな 64 ビット ID)は、JavaScript によってパースされると精度を失います。生成された TypeScript 型は依然として `number` を使用します。64 ビット精度には、JSON で `string` を使用するか、手動で `bigint` 型に移行してください。
  • アンダースコア vs. キャメルケースのフィールド。 ジェネレーターは JSON のフィールド命名を保持します。JSON が snake_case を使用しているがターゲット言語が camelCase を期待する場合、出力は適用可能な場所で serde/json アノテーション付きの snake_case フィールドを使用します。後処理または quicktype CLI フラグの使用でオーバーライドしてください。
よくある質問

なぜ最初の生成が遅いのですか?

quicktype エンジンバンドルは約 465 KB gzipped です。最初の生成クリックで読み込み、4G 接続で 2–3 秒かかります。その後、モジュールはページセッションの残りの間キャッシュされます — ブラウザは訪問間でキャッシュするので、キャッシュがクリアされていない限り、その後の最初のクリックも瞬時です。

複数の JSON サンプルから生成できますか?

サンプルを JSON 配列で包み、配列を貼り付けてください。ジェネレーターはサンプル間で見られるフィールドの和集合を推論し、少なくとも 1 つから欠けているフィールドをオプショナルとしてマークします。これは生成された型が実データの変動に耐えられるようにする正しい方法です。

バックエンドコードにはどの言語を選ぶべきですか?

プロジェクトがすでに使用しているものに合わせてください。Go 出力は `encoding/json` の標準構造体タグを使用します。Rust は serde derives を使用します。Kotlin は kotlinx.serialization アノテーションを使用します。Java は Jackson 互換 POJO を生成します。選択は好みではなくプロジェクト固有です。

フィールドコメントは保持されますか?

JSON にはコメント構文がないので、入力に持ち越すコメントはありません。quicktype は一部の言語の出力に doc コメントを含めることができます — これらは自動生成された説明であり、ユーザーコンテンツではありません。

私の JSON はアップロードされますか?

いいえ。すべてはあなたのブラウザで実行されます — 入力はこのページの quicktype-core JavaScript モジュールでローカルに処理されます。quicktype-core 自体も同じ origin(このサイトの静的アセットホスト)から読み込まれ、サードパーティサーバーがあなたのデータを見ることはありません。

どれくらいの大きさの JSON サンプルを使用できますか?

ジェネレーターが目立った時間を要し始めるまで約 5 MB の JSON。ジェネレーターはフルデータセットではなく代表的なサンプルのために設計されています — 通常、いくつかのオブジェクトでクリーンなスキーマを推論するには十分です。