JSON から TypeScript / Go / Rust 構造体ジェネレーター
JSON を貼り付けて、ターゲット言語を選択すると、慣用的な型定義が生成されます。TypeScript、Go、Rust、Kotlin、Java、C#、Python TypedDict をサポート。quicktype 駆動、ブラウザ上で動作。
- 左側のテキストエリアに代表的な JSON サンプルを貼り付けます。
- ターゲットドロップダウンからターゲット言語を選びます。
- 生成をクリック。最初のクリックでエンジンを読み込み(4G で約 2–3 秒);その後の生成は瞬時です。
- 結果をコピーするか、適切なファイル拡張子でダウンロードします。
何ができるのか?
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。ジェネレーターはフルデータセットではなく代表的なサンプルのために設計されています — 通常、いくつかのオブジェクトでクリーンなスキーマを推論するには十分です。