JSONからGo構造体への変換ツール

JSONオブジェクトを貼り付けると、そのためのGo構造体が得られます。オブジェクトごとに1つの構造体、リストごとにスライス、そして元の名前をそのまま保つjsonタグが付きます。

無料 ブラウザで動作 2026年11月12日木曜日確認済み

JSONの全文で、先頭は波かっこにします。名前は元の順序を保ち、数値は元の桁のまま扱います。何も送られず、保存もされません。

一番外側の構造体の名前です。英字、数字、アンダースコアを使い、英字で始めてください。

omitemptyオプションを付けます。これにより、encoding/jsonは空のフィールドを出力から除きます。

結果

Goのコード — コピーするか、models.goとしてダウンロードできます。
確認 — JSONが変換できると緑で表示されます。赤の場合は、場所と理由を示します。
Goのコード

このツールはブラウザ内で動作します。入力した内容が当社に送信されることはありません。

使い方

  1. JSONオブジェクトの欄に、JSONオブジェクトを貼り付けます。全体が1つのオブジェクトで、先頭は波かっこになっている必要があります。
  2. ルートの構造体名に、Productのような名前を入力します。必要ならすべてのタグにomitemptyを付けるにチェックを入れます。
  3. 確認を読みます。緑はオブジェクトが変換できたことを示し、赤は問題のある場所を示します。
  4. Goのコードを、パッケージ句のあるファイルにコピーするか、models.goとしてダウンロードします。

Goの型の選び方

JSONの各値には、それを保持するGoの型が割り当てられます。文字列はstring、trueとfalseはboolになります。JSONを型に読み戻す規則は、encoding/json(英語)のUnmarshalの規則に従います。

  • 64ビットに収まる整数はint64になります。小数点や指数を含む数(例:1.0や2e3)はfloat64になり、int64に収まらない大きな整数もfloat64になります。
  • nullはanyになります。別の型の値の隣にあるnullは、その型を取ります。nullは、別の型のGo値を変えないからです。
  • オブジェクトは構造体になり、リストは中の項目が共有する型を取ります。同じリストの中のオブジェクトは1つの構造体にまとめられ、型が混在するリストは[]anyになります。
  • 空のオブジェクトは空の構造体になり、空のリストは[]anyになります。

名前、タグ、衝突

各フィールドの名前は、JSONの名前から取られます。語をつなぎ、各語の先頭を大文字にするので、user-nameはUserNameになります。Go言語仕様(英語)では、大文字で始まる名前のフィールドが外部から参照できます。そのため、先頭の文字を大文字にしています。jsonタグは名前を元のまま保つので、JSONを読み戻すときも同じキーが対応します。

同じGo名になる2つの名前には、ABとAB2のように番号が付きます。既に使われている構造体名にも番号が付きます。リストの項目は、そのリストの名前から付けられます。例えばproductsはProductという構造体になり、複数形の規則がない名前にはItemが付きます。

  • カンマを含む名前、ハイフン1つだけの名前、文字のない名前はjsonタグにできないので、ツールはそのキーの名前を示して停止します。
  • omitemptyを付けると、すべてのタグにそのオプションが付きます。ツールはルートの構造体名の先頭文字を大文字にするので、productはProductになります。

このツールがしないこと

  • パッケージ句とimportは追加しません。コードは、自分のパッケージ句があるファイルに貼り付けてください。
  • 省略可能なフィールドにポインターを使いません。JSONで欠けているフィールドやnullのフィールドと、ゼロ値をもつフィールドは区別しません。
  • idをIDに変えるなど、Goで一般的な頭字語への変更はしません。idはIdになります。コードの書き方でIDが必要なら、フィールド名を手で変えてください。

計算例:持ち主と2つの項目をもつ注文

次のJSONは、整数、小数、オブジェクト、2つのオブジェクトからなるリストをもちます。表は、各JSONの名前がどのGoのフィールドになるかを示しています。ツールは表の下に3つの構造体を書き、一番外側の構造体Orderを最初に置きます。

JSONの名前 Goのフィールド Goの型 タグ
id Id int64 json:"id"
ratio Ratio float64 json:"ratio"
owner Owner Owner json:"owner"
items Items []Item json:"items"

よくある質問

整数がintではなくint64になるのはなぜですか?

int64型は64ビットの符号付き整数で、-9223372036854775808から9223372036854775807までのすべての整数を保持します。ツールは、収まるすべての整数にこの型を使うので、値があふれることはありません。コードでintが必要な場合は、手で型を変えてください。

nullがanyになるのはなぜですか?

Goには、それだけでnullを保持する型がないため、どんな値も保持するanyを使います。別の型の値の隣にあるnullは、その型を取ります。encoding/jsonは、nullを読むときに別の型のGo値を変えないからです。

フィールド名がIDではなくIdになるのはなぜですか?

ツールは各語の先頭文字を大文字にするだけで、Goの一般的な頭字語は適用しないため、idはIdになります。jsonタグはidのままなので、データの読み方は同じです。コードの書き方でIDが必要なら、フィールド名を変えてください。

出力にはGoのどのバージョンが必要ですか?

出力はnullにanyを使います。anyはinterface{}の別名で、Go 1.18で追加されました。コードがそれより古い場合は、anyをinterface{}に置き換えてください(同じ型です)。

ツールが一部の名前を受け付けないのはなぜですか?

jsonタグには名前と、カンマの後に続くオプションが書かれるため、カンマを含む名前はタグに書けません。ハイフン1つだけのタグはフィールドを隠すので、その名前も受け付けません。

貼り付けたJSONはどこかに送られますか?

いいえ。変換はブラウザの中で行われ、貼り付けた内容は保存されず、当サイトのサーバーにも送られません。信頼できないページには、パスワードやトークンを貼り付けないでください。

出典

数値と文章の最終確認日:2026年11月12日木曜日。

当サイトの運営に必要なCookieを使用します。お客様の同意があれば、Googleは広告用Cookieを使い、パーソナライズ広告を表示します。拒否された場合も広告は表示されますが、パーソナライズはされません。