本文へスキップ
にゃんこツール

JSON→型定義生成(TypeScript・C#・Go・Python・Java)

JSONを貼り付けると、その形に合う型定義を TypeScript(interface / type)、C#(クラス)、Go(構造体)、Python(dataclass)、Java(record)のいずれかで生成します。APIのレスポンス例から型やモデルクラスを起こしたいときに便利です。ネストしたオブジェクトは別の型として切り出し、配列内で欠けているキーは省略可能(TypeScriptなら ?)にします。JSONの検証・整形は JSON整形 もご利用ください。

🔒 ブラウザ内で完結・入力データはサーバーに送信されません

出力する言語
TypeScriptの宣言形式

注意事項

  • 型は貼り付けたJSONの値から推測します。サンプルに現れない値(別の型になりうるフィールドなど)は反映されないため、生成結果は仕様に合わせて調整してください。
  • 配列は全要素の型を1つにまとめます。キーが一部の要素にしかなければ省略可能になります(TypeScriptは ?、C#は T?、Goはポインタと omitempty、Pythonは「T | None = None」、Javaは参照型)。
  • 要素ごとに値の型が違う配列は、TypeScriptでは (number | string)[] のようなユニオン型になります。C#・Go・Python・Javaには同等の型がないため object / any / Any / Object になります。
  • 空の配列は要素の型が分からないため、TypeScriptでは unknown[]、他の言語では object / any / Any / Object のリストになります。null の値も同様です。実際に取りうる型は手で書き換えてください。
  • C#・Go・Python・Java では、小数点のない数値を整数型(long / int64 / int)、小数点のある数値を浮動小数点型(double / float64 / float)にします。サンプルで 1 と書かれていても実際は小数になりうる項目は、手で直してください。TypeScript はすべて number です。
  • キー名が各言語の命名規則と異なる場合(例: user_id)は、プロパティ名を変換し、元のキー名を C# は [JsonPropertyName]、Go は json タグ、Java は @JsonProperty(Jackson)、Python はコメントに残します。Python の dataclass は JSON のキー名を自動では対応付けないため、読み込み時に変換が必要です。
  • Python の出力は型ヒントに「|」を使うため Python 3.10 以降、Java の出力は record を使うため Java 16 以降が前提です。

用語解説

interface

オブジェクトの形(プロパティの名前と型)を表すTypeScriptの型定義です。継承や宣言のマージができます。

type(型エイリアス)

型に別名を付ける構文です。オブジェクトの形のほか、ユニオン型やタプルなども表せます。オブジェクトの形ならinterfaceとほぼ同じ用途で使えます。

ユニオン型

「stringまたはnumber」のように、複数の型のどれかを取りうることを表す型です。string | number と書きます。

省略可能プロパティ

プロパティ名の後ろに ? を付けた、値がなくてもよいプロパティです。型としては T | undefined を取ります。

dataclass / record

データを保持するだけのクラスを簡潔に書く構文です。Python の dataclass と Java の record が該当し、コンストラクタなどを自動で用意してくれます。

よくある質問

TypeScript以外にどの言語の型を生成できますか?

C#(クラス)、Go(構造体とjsonタグ)、Python(dataclass)、Java(record)に対応しています。出力する言語は画面上のボタンで切り替えます。どの言語でも、ネストしたオブジェクトは別の型として切り出します。

数値は整数と小数をどう区別しますか?

TypeScript以外の言語では、サンプルの値に小数点があれば小数(double / float64 / float)、なければ整数(long / int64 / int)にします。配列内で整数と小数が混在する場合は小数として扱います。サンプルでは整数でも実際は小数になる項目は手で直してください。

配列の中のオブジェクトで、キーが揃っていない場合はどうなりますか?

配列内のすべてのオブジェクトを1つの型に統合します。一部の要素にしか存在しないキーは、省略可能なプロパティ(?付き)になります。

nullや空配列はどんな型になりますか?

nullの値は null 型、空配列は要素の型が分からないため unknown[] になります。実際のAPI仕様に合わせて、string | null のように手で書き換えてください。

キー名がハイフン入りや数字の場合も使えますか?

はい。"first-name" のようにTypeScriptの識別子として使えないキーは、引用符付きのプロパティとして出力します。ネストしたオブジェクトの型名は、キー名をPascalCaseにして付けます。

このページをシェア

↑↓ 選択 Enter 開く Esc 閉じる