JSON型定義ジェネレーター(TypeScript・Go・Python)
JSONのサンプルから、TypeScriptのinterface、Goの構造体、Pythonのモデル、C#のクラス、Rustの構造体、JSON Schemaを生成します。
JSON型定義ジェネレーター — TypeScript・Go・Python・C#・Rust・JSON Schema
APIのレスポンスなどのJSONサンプルを貼り付けると、それに合う型定義が手に入ります。TypeScriptのinterface、JSONタグ付きのGoの構造体、Pydanticモデルやdataclass、C#のクラス、serde用のRustの構造体、そしてJSON Schemaです。入れ子のオブジェクトはそれぞれ名前付きの型になるため、結果は人が手で書いたようなコードになります。
APIのレスポンスには、実際の顧客データ、トークン、社内のIDが含まれていることがよくあります。変換はすべてブラウザー内で行われるので、そのどれもが外部に送信されることはありません。
使い方
- 左の欄にJSONを貼り付けるか、サンプルを押して例を表示します。
- 出力形式で言語を選びます。
- 最上位の型の名前をルートの型名に入力します。TypeScriptでは
interfaceかtypeかを選びます。 - 結果をコピーしてプロジェクトに貼り付けます。
型の決まり方
- 数値は、すべての値が整数なら整数型、そうでなければ浮動小数点型になります。同じフィールドに
42と18.5があれば浮動小数点型です。 - オブジェクトの配列はマージされます。どれか1つの要素にでも現れたキーは、すべて型に含まれます。
- 省略可能なフィールド:欠けているキーを省略可能にするがオンなら、一部の要素にないキーは省略可能になります(
coupon?: string、omitempty、Option、= None)。 - null許容のフィールド:ある要素で値が
nullなら、そのフィールドはnull許容になります。たとえばstring | null、Goでは*stringです。 - 型の混在(ある要素では数値、別の要素では文字列など)は
unknown、Any、interface{}になるので、手で判断できます。 - 名前はキーから付けられます。
addressからはAddress、ordersの要素からはOrderができます。同じ形のオブジェクトは1つの型を共有します。
言語ごとの出力
| 出力形式 | 得られるもの |
|---|---|
| TypeScript | export interfaceまたはexport type。名前として使えないキーは引用符で囲まれます |
| Go | jsonタグ付きのエクスポートされた構造体、int64とfloat64、IDやURLのような慣例的な頭字語 |
| Python (Pydantic) | BaseModelのクラス。フィールドはsnake_caseで、JSONのキーと異なる場合はField(alias=...)が付きます |
| Python (dataclass) | @dataclassのクラス。dataclassの制約に合わせて、省略可能なフィールドは最後に置かれます |
| C# | System.Text.Json用の[JsonPropertyName]付きクラス、long、double、List<T> |
| Rust | SerializeとDeserializeをderiveした構造体。必要な箇所には#[serde(rename)]が付きます |
| JSON Schema | requiredのリストを含むdraft 2020-12のスキーマ。そのままバリデーターで使えます |
より正確な型を得るには
型の完全さは、元になったサンプル次第です。省略可能なフィールドがどれも少なくとも1回は含まれているレスポンスを使い、要素が1つだけの配列ではなく、内容の異なる要素をいくつも含む配列を貼り付けてください。そうすればマージの際に、どのフィールドが変化するのかがわかります。日付はJSONでは文字列として届き、生成される型でも文字列のままです。本当の日付型が必要な箇所では、コードの中で変換してください。
関連ツール
先にJSONを整えたり検証したりするにはJSON整形ツールを、YAML・CSV・XMLに変換するにはJSON変換ツールを使ってください。次のタスクページでは、言語を選んだ状態でこのツールが開きます:JSONをTypeScriptに変換、JSONをGoに変換、JSONをPythonに変換、JSONをC#に変換、JSON Schema生成。