生成・コード構造ツール

JSON → Go構造体

JSONサンプルをGo構造体に変換し、元のフィールドとの対応を保持します。

JSON入力

生成コード

公開フィールドとjsonタグを持つGo構造体を生成。ポインター、入れ子、スライスに対応します。

JSONの推論とGoコードの生成はすべてブラウザー内で行い、サーバーやオンライン生成サービスへ送信しません。

このツールについて

Go 1.18以降の名前付き構造体とスライス型を生成します。フィールド名を公開可能な有効な識別子へ変換し、jsonタグで可能な限り元のキーを保持します。複雑なキーや特殊なキーはencoding/jsonの制約も確認してください。

使い方

  1. JSONを入力します。複数のオブジェクトサンプルがあると省略フィールドを見つけやすくなります。
  2. ルート構造体名を設定します。
  3. 「変換」を押し、公開フィールド、jsonタグ、nilを許すポインター、スライス型を確認します。
  4. コードをコピーするかGoソースをダウンロードし、対象パッケージへ組み込んでプロジェクトに合わせて調整します。

使用例

  • {"first_name":"Tom"}:公開フィールドFirstNameを生成し、json:"first_name"を保持します。
  • [{"id":1,"name":"Tom"},{"id":2}]:nameは省略可能で、*stringとomitemptyを使用できます。
  • {"matrix":[[1,2],[3,4]]}:[][]int64と推論します。

型の対応規則

文字列はstring、安全な整数はint64、小数や混在する数値はfloat64、真偽値はbool、配列は[]Tになります。既知の型がnullまたは省略を許す場合は適切なポインターを使い、省略可能なフィールドにはomitemptyを付けます。不明な型、nullのみ、統一できない混在要素にはanyを使います。対象はGo 1.18以降です。フィールドを公開し、構造体名は安定した名前で衝突を避け、タグは有効なGo文字列としてエスケープします。encoding/jsonではカンマ、ハイフン、一部の制御文字を含むキーに特別な意味があります。往復変換できないキーはコード内で説明します。構文が有効でも、すべてのJSONキーを自動対応できるとは限りません。入力・出力はそれぞれ1 MiB、入れ子64階層、100000ノード、統合フィールド5000個、型256個までです。安全な整数範囲外、非有限値、アンダーフローで0になる数値はエラーにし、その他の小数はブラウザーの浮動小数点精度に基づきます。

主な用途

  • サービスAPIのサンプルからGoのデータ型を用意する。
  • nullや省略を許すフィールドのポインターの必要性を確認する。
  • 入れ子のJSONから名前付き構造体とスライスを生成する。

プライバシー

JSONの推論とGoコードの生成はすべてブラウザー内で行い、サーバーやオンライン生成サービスへ送信しません。

結果を残す場合は、ページを離れる前にコピーまたはダウンロードしてください。

よくある質問

フィールド名の先頭を大文字にするのはなぜですか?

Goのencoding/jsonでは通常、公開フィールドが必要です。先頭を大文字にすると、パッケージ外や標準ライブラリからアクセスできます。

jsonタグは何をするものですか?

構造体のフィールドとJSONキーの対応を指定し、フィールド名を変えても一般的な元のキーを保持します。

nullはどう扱いますか?

既知の型とnullが両方現れる場合はポインターを使えます。nullしかなく情報が足りない場合はanyなどの保守的な型を使います。

anyを使うのはなぜですか?

対象はGo 1.18以降で、anyはinterface{}の別名です。サンプルだけでは型を特定できない場合に使います。

どのJSONキーでも有効なタグにできますか?

必ずしもできません。Goのタグ文字列はエスケープできますが、encoding/jsonはカンマやハイフンなども解釈します。そのようなキーには独自の対応付けが必要です。生成後の説明を確認してください。

開発者ツール一覧に戻る