JSON から Go 構造体へ
JSON を Go の構造体に変換します。公開フィールド名、json タグ、null 用のポインタ型、任意の omitempty に対応し、入れ子のオブジェクトや配列も扱えます。無料です。
ネストしたオブジェクトは別の struct になり、null 許容値はポインターを使います。整数は int64、小数は float64、混在または null のみの値は any になります。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
関連ツール
すべて表示JSON から Go 構造体とは?
JSON のサンプルから Go らしい struct 定義を生成します。フィールド名は Go の頭字語(ID、URL、API など)を踏まえた、公開されるパスカルケースになり、各フィールドには元のキーを持つ json:"…" タグが付きます。入れ子のオブジェクトは別々の名前付き構造体になります。
JSON から Go 構造体の使い方
- JSON 入力 に JSON のサンプルを貼り付けます(サンプルを読み込む や ファイルを開く も使えます)。
- ルート型の名前 を設定します(既定は
Root)。 - 省略可能・null 許容フィールドに omitempty を付ける をオンのままにするか、オフにします。
- 生成された Go のコードをコピーするか、ダウンロード してファイルとして保存します。
例
{"id":1,"name":"A","tags":["x"]} type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
} JSON から Go 構造体を使うべき場面
encoding/json で API レスポンスをアンマーシャルするときに使います。時刻や列挙型のための独自型は生成しません。必要に応じて string を time.Time などに自分で変更してください。
JSON から Go 構造体の仕組み
サンプルを再帰的にたどり、各位置で見つかった型を集めます。オブジェクトの配列は 1 つの型にまとめられ、一部の要素にないキーはオプショナル、どこかで null になるキーは null 許容になります。整数と小数が混在する場合は浮動小数点型になり、それ以外で型が混在する場合は動的な型にフォールバックします。入れ子のオブジェクトは名前付きの型になり(キーのパスカルケースで、配列のキーは単数形にします:orders → Order)、名前が衝突した場合は数字の接尾辞が付きます。Go の出力では、整数に int64、小数に float64、さらに string、bool、配列にはスライス、null 許容の値にはポインタ(*T)、動的な値や null のみの値には any を使います。列は gofmt の出力のようにそろえられます。
一般的な使用例
- json.Unmarshal 用に REST のレスポンスをモデル化する
- JSON ファイルから設定用の構造体を作る
- Go のマイクロサービスの DTO を素早く書く
- JSON と Go コードのフィールド名の対応を比べる
よくある質問
なぜ int ではなく int64 なのですか?
int64 はどのプラットフォームでもサイズが保証されており、大きな ID でのオーバーフローを避けられます。好みで int に変更してください。
ポインタはいつ使われますか?
サンプルでキーの値が null の場合、フィールドは *T になり、値がないことをゼロ値と区別できるようになります。
omitempty は何をしますか?
encoding/json はマーシャル時に、ゼロ値のフィールドを出力しません。このオプションは、サンプルでオプショナルまたは null 許容だったフィールドにのみ付与されます。