Go構造体→JSONサンプル生成

GoのstructとjsonタグをJSON形式のサンプルデータへ自動変換するツールです。ネストしたstruct・スライス・omitempty・json:"-"タグにも対応し、APIモックやPostmanのExample作成、フロントエンド開発のサンプルペイロード準備に役立ちます。

Go構造体からJSONのサンプルを起こす

APIのモックを作ったり、Postmanにレスポンス例を登録したりする場面では、structの定義から「実際にどんなJSONが返るか」を手で書き起こすことになります。このツールはGoのstruct定義を貼り付けるだけで、そのstructがエンコードされたときの形をサンプルJSONとして生成します。ネストしたstruct・スライス・`omitempty`・`json:"-"` にも対応しています。

**ここで肝心なのは、Goのフィールド名がそのままJSONのキーになるとは限らないという点です。** jsonタグがあればそちらが優先され、`json:"-"` が付いたフィールドはそもそも出力されません。`omitempty` はゼロ値のときに省かれるため、**同じstructでも値によってキーの顔ぶれが変わります。** つまり定義を目で追うだけでは実際のJSONの形を取り違えやすく、そこを機械的に展開してくれるのがこのツールの役どころです。生成される値は型ごとの代表値なので、意味のある値へ置き換えてから使ってください。

使い方

  1. struct定義を貼り付ける 関連する複数のstructをまとめて貼ってかまいません。
  2. 対象のstruct名を指定する **複数ある場合に指定します。未入力なら最初のstructが使われます。**
  3. 生成されたJSONを確認する ネストやスライスも展開された状態で出力されます。
  4. 値を差し替えて使う 代表値が入っているので、用途に合った実データへ置き換えます。

使いこなすためのヒント

  • 複数のstructをまとめて貼り付けると、ネストしたフィールドの型を自動的に解決して再帰的にサンプルオブジェクトを生成します(定義が見つからない場合は空オブジェクト {} で代替し警告を表示します)。
  • 対象Struct名を指定すると、入力に複数のstructがある場合でもルートにしたいstructを選べます(未入力の場合は最初に出現したstructが使われます)。
  • json:"-" を指定したフィールドはJSON出力から除外されます。omitempty付きのフィールドもキー自体は通常どおり出力されるため、不要であれば手動で削除してください。
  • 生成されるのはあくまで型に基づいたプレースホルダ値(文字列は"example"、数値は1など)です。実際のAPIレスポンス例として使う場合は値を実データに置き換えてください。
  • このツールは兄弟ツールのJSON→Go構造体変換の逆方向です。Goのハンドラーで定義したstructから、フロントエンドやQAチーム向けのサンプルペイロードを素早く作成できます。

活用シーン

APIのモックを用意する

**サーバーを書く前にレスポンス例を固められるため、フロントエンドの着手を待たせずに済みます。**

ドキュメントに例を載せる

PostmanのExampleやOpenAPIのサンプルへ貼る素材になります。

タグの効きを確かめる

`omitempty` や `json:"-"` を付けた結果がどう出るかを、実際の形で確認できます。

フロントエンドと形をすり合わせる

型定義を渡すより、具体的なJSONを見せたほうが認識の齟齬が起きにくくなります。

Goのエンコードの用語

jsonタグ
フィールドに添える `json:"user_id"` の形の注釈で、**JSON側のキー名を指定します。** 無ければフィールド名がそのまま使われます。
omitempty
**値がゼロ値のときにキーごと出力から省く**指定です。0や空文字も省かれる点に注意が必要です。
json:"-"
そのフィールドをJSONに出力しない指定です。内部用のフィールドを隠すのに使います。
ゼロ値
型ごとに決まった初期値です。数値は0、文字列は空、ポインタやスライスは nil になります。
スライス
可変長の並びで、JSONでは配列になります。**nilのスライスは `null` として出力される点が空配列と異なります。**
埋め込みフィールド
型名だけを書いて他のstructを取り込む記法です。JSONでは親のキーと同じ階層に展開されます。

よくある質問

Goで定義したAPIレスポンス用のstructを手作業でJSON化すると、フィールドの型やjsonタグの解釈を間違えやすく、ネストした構造では特に手間がかかります。自動生成することでフロントエンドチームやQAチームへ正確なサンプルペイロードを素早く共有できます。

入力内に該当するstructの定義が見つからない場合、そのフィールドの値は空オブジェクト {} として出力され、画面に警告メッセージが表示されます。定義元のstructも一緒に貼り付けることで正しくネストしたサンプルが生成されます。

omitemptyはあくまでGo側でゼロ値を省略するための指定なのでキー自体はサンプルJSONにそのまま出力されます。一方 json:"-" が指定されたフィールドはエンコード時に完全に除外されるため、サンプルJSONにも含まれません。

いいえ、あくまで型を満たすためのプレースホルダです。文字列は"example"、整数は1、浮動小数点数は1.5、真偽値はtrueのように固定的な値を割り当てているため、実際のデータとして使う際は適宜書き換えてください。

はい、このツールは正規表現と行単位の解析による簡易パーサーであり、実際のGoの構文解析器(AST)は使用していません。複数行にまたがる型定義や匿名structの入れ子など複雑な記法には対応していないため、あくまで簡易的な下書き生成ツールとしてご利用ください。
ツールくん

余談ですが ― JSON→Go構造体変換の逆方向という発想

GoでWeb APIを実装する際、レスポンスの構造はstructとjsonタグの組み合わせで定義するのが一般的です。しかしフロントエンド開発者やQAエンジニアがAPIの挙動を確認したい場合、Goのコードを読んでフィールドの型を1つずつ頭の中でJSONに変換するのは手間がかかり、誤解も生まれやすい作業です。

このツールは兄弟ツールである「JSON→Go構造体変換」のちょうど逆方向の変換を行います。Goのstruct定義を貼り付けるだけで、jsonタグに従ったキー名と型に応じたプレースホルダ値を持つサンプルJSONを生成し、PostmanのExample作成やフロントエンドのモックデータとしてすぐに使える形にします。

ただしこのツールは本物のGoコンパイラではなく、正規表現と行単位の解析による簡易パーサーです。単純なフィールド定義や、入力内に複数貼り付けられたネストしたstructの解決には対応していますが、匿名structの入れ子や複数行にまたがる型定義など複雑な記法は正しく解析できない場合があります。あくまでたたき台として活用し、最終的な仕様はGoのソースコードと照らし合わせて確認してください。