Go → JSON コンバーター
Go の struct と composite literal を貼り付けると、きれいな JSON が返ってきます。
このツールの役割
json:"..." タグ付きの Go の struct と、どこかで宣言された composite literal(order := Order{...})があって、encoding/json が生成するはずの JSON が欲しい──そんなときに使います。両方を左のエディタに貼り付けて「変換」を押してください。タグを読み取り、omitempty と - のルールを適用し、nil ポインタを処理して、json.MarshalIndent が出力するのと同じ JSON を返します。go run での往復が不要になります。
単純な置換ではなく、実際の Go のマーシャリングのセマンティクスに従います。エクスポートされたフィールド名は json タグの最初の部分でリネームされます。omitempty はゼロ値(空文字、0、false、nil、空の slice/map)を落とします。タグが - の場合、フィールドは除外されます。埋め込み(匿名)struct のフィールドは encoding/json と同じように昇格されます。time.Time は RFC 8259 互換の RFC 3339 形式の文字列として出力され、バイトスライス([]byte)は base64 エンコードされます。
数値型も Go のルールに従います。float64 は精度を保ち、int/int64 は数値のまま、nil ポインタは JSON の null になります。slice は JSON 配列になりますが、nil slice は null([] ではありません)になります──これは Marshal のデフォルト挙動に合わせています。map[string]V は JSON オブジェクトになります。複数の struct をまとめて貼り付ければ、各インスタンスがトップレベルのエントリとして出力されます。
使い方
3 ステップです。小さな struct でも、<code>types.go</code> ファイル丸ごとでも動きます。
Go を貼り付ける(またはサンプルを試す)
左のエディタに struct 定義と composite literal(order := Order{...})を入れてください。struct 単体、埋め込みフィールドを持つ複数の struct、パッケージレベルの宣言、どれでも OK です。リアルな出発点が欲しい場合は サンプルを読み込む をクリックしてください。
package 行と import はそのままで大丈夫です──パーサーは無視します。struct タグ、メソッドレシーバ、コメントも問題ありません。参考として、encoding/json.Marshal のドキュメントにこのツールが従うすべてのルールが書かれています。エッジケースに当たったら Go のソースリポジトリ も見る価値ありです。
「変換」を押す
緑色の 変換 ボタンをクリックします。ツールが struct 定義をパースし、composite literal を解決し、タグのルールを適用して、インデント付きの JSON を出力します。
JSON をコピーする
右側のパネルに、API リクエスト、テストテーブル、設定ファイル、あるいは os.ReadFile で読み込むフィクスチャにそのまま使える JSON が入ります。
実際に役立つ場面
HTTP ハンドラのリクエスト/レスポンスサンプル
<code>net/http</code> や <code>gin</code> ハンドラ用のリクエスト/レスポンス struct があるときに使えます。literal と一緒に貼り付ければ、curl で送信したり Postman に貼り付けられる JSON ボディが得られます。
テーブル駆動テストのフィクスチャ
テーブルテストの struct インスタンスを、ゴールデンファイルテストや外部ツール向けに独立した JSON ファイルに変換できます。
Kubernetes の CRD とマニフェスト
カスタムリソースやコントローラーのペイロードを表す Go の struct を、<code>kubectl apply</code> や Kubernetes API が使う JSON 形式に変換できます。
Kafka / NATS / gRPC-gateway のメッセージ
Go のメッセージ struct を JSON にシリアライズして、パイプライン全体を立ち上げずに producer のテスト、サンプルペイロード、ドキュメントに使えます。
よくある質問
struct の json タグは反映されますか?
はい。タグの最初の値でフィールド名がリネームされ、omitempty でゼロ値が落ち、- でフィールドが完全に除外されます。encoding/json Marshal のリファレンスに書かれているルールと同じです。
time.Time と []byte はどう処理されますか?
time.Time は time.Time.MarshalJSON と同じく RFC 3339 形式(例: "2026-03-14T10:30:00Z")でフォーマットされます。[]byte は標準ライブラリのデフォルトと同じく base64 エンコードされて JSON 文字列になります。
nil ポインタと nil slice はどうなりますか?
nil ポインタは JSON の null になります。nil slice も null([] ではありません)になります──Go のデフォルト挙動です。空の配列が欲しい場合は []T{} で slice を初期化してください。
埋め込み(匿名)struct のフィールドは昇格されますか?
はい。埋め込み struct のフィールドは外側のオブジェクトにフラット化されます──ただし、埋め込み struct 自体に json タグがある場合を除きます。encoding/json のルールと同じです。
複数の struct を含むファイルをまとめて貼れますか?
はい。貼り付けた中でインスタンスを持つすべての struct 型が、それぞれ独立したエントリとして JSON に出力されます。ネストした struct 型は使われている場所でインライン展開されます。
コードはどこかに保存されますか?
コードは変換のためにバックエンドに送られますが、保存もログ記録もされません。とはいえオンラインツール全般と同様、機密コードを貼る前にはひと呼吸おいて確認してください。
関連するツール
Go → JSON はパズルの一ピースに過ぎません。相性のいいツールを並べておきます: