piapia123
ja

JSON → TypeScript / Go / Java / Rust

整形

処理はすべてブラウザ内で完結します。データは送信されません

入力
出力

JSON のサンプルを貼れば、そのままプロジェクトに貼れる型定義が手に入ります。単にキー名を写すだけではありません。同じキーが要素によって違う型なら共用型に退化させ(共用型のない言語では interface{} / Object / serde_json::Value に)、一部の要素にしか出てこないキーは任意にし、構造が完全に同じ入れ子のオブジェクトは1つの型にまとめます —— 同じような宣言を大量に吐き出すことはしません。フィールド名は対象言語の流儀に変換し、元のキー名は json タグ / serde rename で残します。

機能

  • 対象言語は4つ:TypeScript interface、Go struct、Java class、Rust struct
  • 配列内で欠けているキーを任意に(TypeScript は ?、Go はポインタ + omitempty、Rust は Option)
  • 同じ位置に違う型が現れたら共用型を生成します。どれか1つを勝手に選ぶことはしません
  • 構造が同じ入れ子オブジェクトは1つの型に統合。名前が衝突して構造も違うときだけ連番を付けます
  • フィールド名を対象言語の流儀に変換:Go は公開名 + json タグ、Java はキャメルケース、Rust はスネークケース + serde rename
  • 不正なキー名も各言語の規則で処理:TypeScript は引用符で囲み、他は名前を書き換えて元のキー名を保持します
  • Go のキー名にバッククォートが含まれる場合は二重引用符形式のタグに切り替え、構造体タグが切れるのを防ぎます
  • Java はルートクラスだけを public にするので、出力全体を1ファイルに貼れます
  • 64 階層を超える入れ子は任意型に退化させ、読めない型を生成しません
  • ルート型名は変更可能。不正な識別子を入れても自動で正規化します

使い方

  1. できるだけ多くの分岐を含む JSON サンプルを入力欄に貼り付けます
  2. 対象言語を選びます
  3. ルート型名を入力し、null 許容フィールドを任意にするかを決めます
  4. Ctrl/⌘ + Enter か「実行」を押し、「コピー」で結果を取り出します

よくある質問

生成される型は正確ですか?
正確さはサンプル次第です。あるキーが1種類の値しか出てこないと、「今回たまたまそうだった」のか「型がそうである」のかをツールには区別できません。ですからサンプルはできるだけ分岐を網羅してください:null と非 null を両方、整数と小数を両方、配列には構造の違う要素を複数。生成後に手で緩めるほうが、ゼロから書くよりずっと速いはずです。
一部のフィールドに ? やポインタが付くのはなぜですか?
そのフィールドがサンプル内の全要素には無いか、null が現れているからです。「任意フィールド」のスイッチを切れば全部必須として出力されますが、実際のデータでは読めなくなるかもしれません。
null からは何が生成されますか?
TypeScript では型に併合し(string | null)、任意フィールドを有効にしていれば ? も同時に付きます。Go はポインタ、Rust は Option、Java はラッパー型(Integer、Boolean、Double)を使います。
JSON は送信されますか?
いいえ。解析・型推論・コード生成のすべてがブラウザのメモリ内で完結し、ページはリクエストを一切送りません。オフラインでもそのまま使えます。

関連ツール