このツールについて
Go 1.18以降の名前付き構造体とスライス型を生成します。フィールド名を公開可能な有効な識別子へ変換し、jsonタグで可能な限り元のキーを保持します。複雑なキーや特殊なキーはencoding/jsonの制約も確認してください。
使い方
- JSONを入力します。複数のオブジェクトサンプルがあると省略フィールドを見つけやすくなります。
- ルート構造体名を設定します。
- 「変換」を押し、公開フィールド、jsonタグ、nilを許すポインター、スライス型を確認します。
- コードをコピーするかGoソースをダウンロードし、対象パッケージへ組み込んでプロジェクトに合わせて調整します。
使用例
- {"first_name":"Tom"}:公開フィールドFirstNameを生成し、json:"first_name"を保持します。
- [{"id":1,"name":"Tom"},{"id":2}]:nameは省略可能で、*stringとomitemptyを使用できます。
- {"matrix":[[1,2],[3,4]]}:[][]int64と推論します。
型の対応規則
文字列はstring、安全な整数はint64、小数や混在する数値はfloat64、真偽値はbool、配列は[]Tになります。既知の型がnullまたは省略を許す場合は適切なポインターを使い、省略可能なフィールドにはomitemptyを付けます。不明な型、nullのみ、統一できない混在要素にはanyを使います。対象はGo 1.18以降です。フィールドを公開し、構造体名は安定した名前で衝突を避け、タグは有効なGo文字列としてエスケープします。encoding/jsonではカンマ、ハイフン、一部の制御文字を含むキーに特別な意味があります。往復変換できないキーはコード内で説明します。構文が有効でも、すべてのJSONキーを自動対応できるとは限りません。入力・出力はそれぞれ1 MiB、入れ子64階層、100000ノード、統合フィールド5000個、型256個までです。安全な整数範囲外、非有限値、アンダーフローで0になる数値はエラーにし、その他の小数はブラウザーの浮動小数点精度に基づきます。
主な用途
- サービスAPIのサンプルからGoのデータ型を用意する。
- nullや省略を許すフィールドのポインターの必要性を確認する。
- 入れ子のJSONから名前付き構造体とスライスを生成する。
プライバシー
JSONの推論とGoコードの生成はすべてブラウザー内で行い、サーバーやオンライン生成サービスへ送信しません。
結果を残す場合は、ページを離れる前にコピーまたはダウンロードしてください。
よくある質問
フィールド名の先頭を大文字にするのはなぜですか?
Goのencoding/jsonでは通常、公開フィールドが必要です。先頭を大文字にすると、パッケージ外や標準ライブラリからアクセスできます。
jsonタグは何をするものですか?
構造体のフィールドとJSONキーの対応を指定し、フィールド名を変えても一般的な元のキーを保持します。
nullはどう扱いますか?
既知の型とnullが両方現れる場合はポインターを使えます。nullしかなく情報が足りない場合はanyなどの保守的な型を使います。
anyを使うのはなぜですか?
対象はGo 1.18以降で、anyはinterface{}の別名です。サンプルだけでは型を特定できない場合に使います。
どのJSONキーでも有効なタグにできますか?
必ずしもできません。Goのタグ文字列はエスケープできますが、encoding/jsonはカンマやハイフンなども解釈します。そのようなキーには独自の対応付けが必要です。生成後の説明を確認してください。