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 階層を超える入れ子は任意型に退化させ、読めない型を生成しません
- ルート型名は変更可能。不正な識別子を入れても自動で正規化します
使い方
- できるだけ多くの分岐を含む JSON サンプルを入力欄に貼り付けます
- 対象言語を選びます
- ルート型名を入力し、null 許容フィールドを任意にするかを決めます
- Ctrl/⌘ + Enter か「実行」を押し、「コピー」で結果を取り出します
よくある質問
- 生成される型は正確ですか?
- 正確さはサンプル次第です。あるキーが1種類の値しか出てこないと、「今回たまたまそうだった」のか「型がそうである」のかをツールには区別できません。ですからサンプルはできるだけ分岐を網羅してください:null と非 null を両方、整数と小数を両方、配列には構造の違う要素を複数。生成後に手で緩めるほうが、ゼロから書くよりずっと速いはずです。
- 一部のフィールドに ? やポインタが付くのはなぜですか?
- そのフィールドがサンプル内の全要素には無いか、null が現れているからです。「任意フィールド」のスイッチを切れば全部必須として出力されますが、実際のデータでは読めなくなるかもしれません。
- null からは何が生成されますか?
- TypeScript では型に併合し(string | null)、任意フィールドを有効にしていれば ? も同時に付きます。Go はポインタ、Rust は Option、Java はラッパー型(Integer、Boolean、Double)を使います。
- JSON は送信されますか?
- いいえ。解析・型推論・コード生成のすべてがブラウザのメモリ内で完結し、ページはリクエストを一切送りません。オフラインでもそのまま使えます。
関連ツール
JSON 整形
整形JSON をオンラインで整形・圧縮し、構文エラーは行・列まで特定。キー名の再帰的な並べ替えにも対応。解析はすべてブラウザ内で行い、送信しません。
モックデータ
生成「フィールド名:型」を数行書くだけで、形式が本物そっくりのモックデータをまとめて生成。JSON・CSV・SQL で出力でき、すべてブラウザ内で処理します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
XML 整形
整形XML をオンラインで整形・圧縮:タグの階層ごとにインデントし、コメント・CDATA・DOCTYPE はそれぞれ別の行に。属性値の中の空白はそのまま保持します。
HTML 整形
整形HTML をオンラインで整形・圧縮:タグの階層ごとにインデントし、テキストとインライン要素は同じ行のまま。script と pre の中身はそのまま保持します。
CSS 整形
整形CSS をオンラインで整形・圧縮:ルールブロックを展開し、宣言は1行ずつ、セレクタのリストは1項目ずつ改行。圧縮は構造上の空白だけを削除します。