本文へスキップ

JSONをGo構造体に変換

json-to-go の移植版を使って JSON から Go の struct 定義を生成し、gofmt で整形します。キーは json:"..." タグ付きのエクスポートされた CamelCase フィールドになり、ネストしたオブジェクトはインラインの匿名 struct、null は any になります。

サードパーティの REST API レスポンスを json.Unmarshal するための struct を書く。

JSON

こんなときに使えます

  • サードパーティの REST API レスポンスを json.Unmarshal するための struct を書く。
  • サンプルのペイロードから、Go の HTTP ハンドラーのリクエスト型とレスポンス型のひな形を作る。

使い方

  1. 左側のエディターに JSON オブジェクトまたは配列を貼り付けます。
  2. 生成された struct を確認します。ルートの型名は常に AutoGenerated です。
  3. パッケージにコピーして型名を変更します。インラインの struct を再利用する場合は名前付きの型に切り出してください。

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Go struct

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

仕様と制限

生成はブラウザ内で行います。型名、インライン/名前付き struct、タグに関する設定はありません。

頭字語は大文字になり(id は ID)、snake_case は CamelCase になります。元のキーは json タグに残ります。

整数は int(大きい値は int64)、小数は float64 になります。null、空配列、型が混在する配列は any または []any になります。

配列内のオブジェクトの構造が異なる場合、一部にしかないキーには ,omitempty が付きます。

FAQ

ルートが配列の JSON も変換できますか?

できます。配列内のすべてのオブジェクトのフィールドをまとめた type AutoGenerated []struct{...} を生成します。

null のフィールドが any になるのはなぜですか?

null の値には型情報がありません。nil を扱えるようにするには、any を *string や *time.Time などのポインターに置き換えてください。

名前付きのネストした struct を生成できますか?

できません。ネストしたオブジェクトはインラインの匿名 struct になります。参照する必要がある場合は、手動で名前付きの型に移してください。

仕様を確認する