JSON サンプルを Go の型に変換する方法

JSON サンプルを貼り付けると、それに対応する Go の型宣言を生成します。構造体、スライス、スカラーのフィールド、そして各フィールドとキーを結び付ける json タグが出力されます。名前は Go の慣習に従い、ネストしたオブジェクトはインラインのままか名前付き型にするかを選べ、同じ形の構造は 1 回だけ宣言されます。

変換はこのブラウザタブの中で実行されます。アップロードもリクエストも行わないため、オフラインでも動作し、第三者に送れないデータでも使えます。

  1. モデル化したい JSON を貼り付けるか入力します。編集に合わせて結果が更新されるので、生成される型が適切になるまでサンプルを調整してください。
  2. 「ネストした型をインライン定義」をチェックしたままにすると親の中に匿名構造体を作り、外すとメインの宣言の後に名前付き型を出力します。
  3. JSON が不正な場合はエラー位置が示され、問題の文字がマークされます。入力を直せば型が再び表示されます。
  4. 「Go 構造体をコピー」でコードを取り出し、「クリア」で両方の欄を空にします。import ブロックはご自身で追加してください。出力は型宣言のみです。

型の推論方法と、出力に含まれないもの

1 つのサンプルから型を推論する仕組み

整数は 32 ビットに収まる場合は int、収まらない場合は int64 になり、小数は float64 になります。1.0 のように整数に見える値も float64 のまま扱われ、整数と小数が混在する配列は []float64 になります。共通の型を持てない値(数値と文字列、オブジェクトと数値など)が混在する配列は []interface{} になります。

オブジェクトの配列はすべてのキーを合わせた 1 つの構造体に統合され、一部の要素にしか存在しないキーには omitempty が付きます。ある要素ではオブジェクト、別の要素ではスカラーであるフィールドは interface{} になります。RFC 3339 形式の文字列(2024-05-06T07:08:09Z)は time.Time になるため、time の import を手動で追加する必要があります。

フィールド名・タグ・任意フィールド

フィールド名は Go のエクスポート名になります。user-id は UserID になり、ID、URL、API、HTTP などの一般的な頭字語は大文字のまま保たれます。元のキーは構造体タグにそのまま残るので、生成されたコードは貼り付けた payload と一致します。

同じ Go 名になる 2 つのキーには連番が付きます(UserID と UserID2)。記号だけのキーは Field、Field2 のようになります。キーに含まれる引用符やバックスラッシュはタグ内でエスケープされ、出力が有効な Go のまま保たれます。

この出力が表すもの、表さないもの

出力されるのは宣言だけです。package 句も import もメソッドもなく、ここでコンパイルも行われません。型が表すのは貼り付けたサンプルでありスキーマではありません。null や欠落したフィールドは入力から推論されるため、より大きな payload で null 許容性と数値の幅を確認してください。

大きなドキュメントもブラウザ内で解析され、端末のメモリの制約を受けます。結果は確認前提の出発点として扱い、型名の調整やサンプルに現れなかった項目の追加を行ったうえで、コンパイラに通してください。

最近使ったツール: