使い方
- JSONオブジェクトの欄に、JSONオブジェクトを貼り付けます。全体が1つのオブジェクトで、先頭は波かっこになっている必要があります。
- ルートの構造体名に、Productのような名前を入力します。必要ならすべてのタグにomitemptyを付けるにチェックを入れます。
- 確認を読みます。緑はオブジェクトが変換できたことを示し、赤は問題のある場所を示します。
- 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はどこかに送られますか?
いいえ。変換はブラウザの中で行われ、貼り付けた内容は保存されず、当サイトのサーバーにも送られません。信頼できないページには、パスワードやトークンを貼り付けないでください。
出典
- Go(英語):encoding/json, Unmarshal rules and struct tags
- Go(英語):The Go Programming Language Specification, numeric types and any
数値と文章の最終確認日:2026年11月12日木曜日。