JSON → Go 構造体
JSONからjsonタグ付きGo構造体を即座に生成。ネストオブジェクト・スライス・ポインタNullable・omitemptyタグ対応。無料、ブラウザ内で処理。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
型マッピング
null→interface{}- 文字列 →
string - 整数 →
int - 浮動小数点数 →
float64 - 真偽値 →
bool - 配列 →
[]T - nullable/省略可能 → ポインタ(
*T) - ネストオブジェクト → 独立した名前付き
struct
例:API レスポンス
{
"user": {
"id": 42,
"name": "Alice",
"email": "alice@example.com",
"is_active": true,
"roles": ["admin", "editor"],
"address": { "city": "New York", "country": "US", "zip_code": "10001" },
"last_login": null
}
}
から次の構造体が生成されます。
type RootObject struct {
User User `json:"user"`
}
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
IsActive bool `json:"is_active"`
Roles []string `json:"roles"`
Address Address `json:"address"`
LastLogin interface{} `json:"last_login"`
}
type Address struct {
City string `json:"city"`
Country string `json:"country"`
ZipCode string `json:"zip_code"`
}
snake_case のキーは CamelCase のフィールド名になり、json タグに元のキーが残るので、encoding/json で双方向に対応します。フィールドは揃えられていないため、gofmt(または保存時に整形するエディタ)でタグを揃えてください。標準ライブラリでデコードします:
var root RootObject
if err := json.Unmarshal(data, &root); err != nil {
log.Fatal(err)
}
fmt.Println(root.User.Name) // Alice
例:トップレベルが配列の場合
[{"sku": "A1", "qty": 2}, {"sku": "B2", "note": "gift"}]
から次の構造体が生成されます。
type RootObject struct {
Sku string `json:"sku"`
Qty *int `json:"qty,omitempty"`
Note *string `json:"note,omitempty"`
}
トップレベルが配列のとき、構造体は要素1つ分を表すので []RootObject にデコードします。一部の要素にないキーは omitempty 付きのポインタになります。
例:同じキー名、小数、数字で始まるキー
{
"order": { "id": "A-1001", "total": 19.0, "meta": { "createdBy": "alice", "source": "web" } },
"payment": { "status": "paid", "meta": { "provider": "stripe", "fee": 0.3 } },
"2fa": true
}
から生成される構造体:
type RootObject struct {
Order Order `json:"order"`
Payment Payment `json:"payment"`
X2fa bool `json:"2fa"`
}
type Order struct {
Id string `json:"id"`
Total float64 `json:"total"`
Meta Meta `json:"meta"`
}
type Meta struct {
CreatedBy string `json:"createdBy"`
Source string `json:"source"`
}
type Payment struct {
Status string `json:"status"`
Meta PaymentMeta `json:"meta"`
}
type PaymentMeta struct {
Provider string `json:"provider"`
Fee float64 `json:"fee"`
}
payment.meta は order.meta とフィールドが違うので別の構造体になり、親の名前を前に付けた PaymentMeta になります(同じフィールドなら両方で Meta を共有)。19.0 は小数点付きで書かれているので total は float64 です。encoding/json は 19.0 を int のフィールドにデコードしません。ツールはブラウザの JSON ソーステキストアクセス(Chrome 114+、Firefox 135+、Safari 18.4+)で数値の書き方を読みます。対応していないブラウザでは 19 に見えるため int のままです。キー 2fa はエクスポートされる名前の先頭に使えないので、フィールド名は X2fa、タグは 2fa のままです。
生成後に直すところ
nullはinterface{}になります。API ドキュメントを確認して*stringや*time.Timeなど実際の型のポインタに変えてください。.や指数のない数値はint、19.0や1e3はfloat64になります。同じ配列やキーに整数と小数が混ざるとfloat64です。サンプルがたまたま整数だけのフィールド(価格など)はintのままなので確認してください。64 ビット環境ではintは 64 ビットです。[]と、それ以外で要素の型が混在する配列は[]interface{}になります。- フィールド名は Go の頭字語の慣習に合わせて調整されません。
idはId、urlはUrlになりますが、Go Code Review Comments はID・URLを推奨しています。どちらでもjsonタグがあるのでデコードは正しく動きます。 - フィールド名が大文字で始まらないキー(
2fa、名前)は先頭にXを付けます(X2fa)。同じフィールド名になる 2 つのキー(user_id、userId)には番号を付けます(UserId2)。空のキーや、構造体タグに書けない文字("、,など)を含むキーは、encoding/jsonがタグで対応付けられないため、フィールドではなくコメントに書きます。 PaymentMetaやMeta2のような名前は JSON のキーから作られます。用途に合わせて名前を変えてください。- 出力されるのは
jsonタグだけです。gorm・bson・validateのタグは自分で追加します。
制限
- 入力は有効な JSON である必要があります。エラーメッセージには位置が出ます(末尾のカンマなら
Expected double-quoted property name in JSON at position 8)。 - 型は貼り付けたサンプルだけから決まります。
FAQ
このツールは何を生成しますか?
json構造体タグ付きのGo struct型宣言を生成します。ネストされたJSONオブジェクトはそれぞれ独立した名前付きstructになります。配列フィールドはスライス([]T)になります。
Nullableフィールドはどう処理されますか?
サンプルで null しか出てこないキーは、型が分からないので interface{} になります。オブジェクトの配列では、一部の要素で null、ほかの要素で値があるキーは、その型のポインタ(*string など)になります。一部の要素にないキーはポインタ(スライスはスライスのまま)になり、json タグに ,omitempty が付きます。null が混ざるだけのキーには ,omitempty は付きません。
なぜポインタ型を使うのですか?
Go では、省略できる値や null になりうる値をポインタで表すのが慣用的なやり方です。*string は nil(キーがない、または null)を表せますが、string では表せません。
どんな json タグが付きますか?
すべてのフィールドに、元の JSON キーをそのまま書いた json タグが付きます。そのため、フィールド名を Go の公開名(大文字始まり)に変えても、スネークケースやキャメルケースのキーと対応します。配列の一部の要素にないキーには ,omitempty も付きます。空のキーや、ダブルクォート・カンマなど構造体タグに書けない文字を含むキーは、フィールドではなくコメントになります。生成するのは json タグだけです。
データはサーバーに送信されますか?
いいえ。構造体はブラウザーのタブの中で生成し、入力した JSON とルート構造体名をサーバーへ送ったり、ブラウザーのストレージに保存したりしません。入力欄の編集を終えたとき、「Go Struct を生成」をクリックしたとき、サンプルを読み込んだときに、ページのアクセス解析が利用イベント(ツール名と generate という操作名)を 1 件記録するだけで、JSON やコードは含みません。