DevToolPal
日本語

JSON → Go 構造体変換

JSON のサンプルから json タグ付きの Go 構造体を生成。名前付きまたはインラインの入れ子構造体と omitempty に対応します。

ローカルで処理、アップロードなし

オプション

入れ子のオブジェクト

JSON

0 文字 · 0 B

Go

0 文字 · 0 B

機能

JSON → Go 変換ツールは JSON のサンプルを読み取り、encoding/json ですぐ使える json タグ付きの Go 構造体定義を書き出します。呼び出している API のレスポンスを貼り付ければ、すべてのフィールドとタグを手で書かなくても、json.Unmarshal にそのまま渡せる型が得られます。

変換ツールはサンプル内のすべての値を調べます。入れ子のオブジェクトは独自の構造体になり、配列の全要素は 1 つの要素型にまとめられ、一部の要素にないか時々 null になるフィールドは省略可能として検出されます。出力は gofmt と同じように整形されます。

使い方

  1. JSON を入力欄に貼り付けるか、.json ファイルをアップロードするか、サンプル をクリックします。
  2. ルート型の名前を設定し、入れ子のオブジェクトの書き方、omitempty を付けるフィールド、null 許容フィールドにポインタを使うかを選びます。
  3. Go のコードをコピーするか .go ファイルとしてダウンロードし、package 行を追加します。

不正な JSON は問題のある行と列とともに表示されます。

例

この JSON は:

{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }

次の構造体になります:

type Root struct {
	ID       int      `json:"id"`
	UserName string   `json:"user_name"`
	Tags     []string `json:"tags"`
	Profile  Profile  `json:"profile"`
}

type Profile struct {
	AvatarURL string `json:"avatar_url"`
}

ヒント

  • 1 つのサンプルからは、そこに含まれる内容しかわかりません。値が数値にも文字列にもなるなら両方を含めるか、複数のサンプルを配列にまとめてマージさせましょう。
  • タイムスタンプは文字列として届きます。形式が RFC 3339 なら、型を自分で time.Time に変えてください。
  • フィールドがまったく同じオブジェクトは 1 つの構造体を共有するので、同じ形が何か所にも出てきても出力は短く保たれます。
  • TypeScript も書きますか?JSON → TypeScript 変換は同じ推論でインターフェースを生成します。

よくある質問

› フィールド名はどのように決まりますか?

JSON のキーはそれぞれ PascalCase のエクスポートされた Go 名に変換され、よくある略語は golint の期待どおり大文字になります。user_id は UserID、avatar_url は AvatarURL です。元のキーは json タグに残るので、encoding/json が正確にフィールドを対応付けます。

› どの Go の型が使われますか?

文字列は string、整数は int(32 ビットに収まらない値があれば int64)、小数は float64、真偽値は bool になります。配列はスライスに、空のオブジェクトは map[string]any に、null だけの値や複数の種類が混ざる値は any になります。

› 名前付き構造体とインライン構造体の違いは何ですか?

名前付きモードでは入れ子のオブジェクトを Address や Order のような独立した型として書くので、再利用やテストがしやすくなります。インラインモードでは匿名の構造体型を親の中に直接書き、すべてを 1 つの宣言にまとめます。多くの簡易変換ツールと同じ形です。

› omitempty はいつ付きますか?

既定では省略可能なフィールド、つまり配列内の一部のオブジェクトにないか時々 null になるフィールドだけに付きます。すべてのフィールドに付ける、まったく付けないことも選べます。ポインタをオンにすると、欠落や null とゼロ値を区別できます。

› JSON はアップロードされますか?

いいえ。構造体はブラウザ内で生成され、サーバーには何も送信されません。