JSON から Go へ
内容はまだありません
左側にJSONを貼り付けると、右側にGoプロジェクトですぐに使えるstruct型定義が自動生成されます。ブラウザでローカル処理されるため、登録やアップロードは不要です。
内容はまだありません
左側にJSONを貼り付けると、右側にGoプロジェクトですぐに使えるstruct型定義が自動生成されます。ブラウザでローカル処理されるため、登録やアップロードは不要です。
JSONからGoは、JSON形式のデータをGo言語のstruct型定義に自動的に変換するプロセスです。JSONはREST API、設定ファイル、メッセージキュー、ログで最も一般的なデータ交換形式であり、Goは強い型付け言語であるため、開発時にはJSONの動的構造をstructにマッピングしてencoding/jsonでデシリアライズする必要がよくあります。特にネストされたオブジェクトを手書きでstructを作成すると、フィールドの漏れや型の間違いが発生しやすいため、このツールはそのような繰り返しの作業を自動化します。
Goのstructは複合データ型であり、`type Name struct { ... }` で宣言されます。各フィールドは名前と型で構成され、フィールド名は他のパッケージからアクセスできるように大文字で始まる必要があります。これは「エクスポート可能な識別子」と呼ばれます。ツールはJSONのフィールド名をPascalCaseのエクスポートフィールド名に自動的に変換します。例えば `user_name` は `UserName` にマッピングされ、元のキーはjsonタグ内に保持されます。
このツールのコア変換はブラウザ内のjsonFormat Web Workerによって実行され、quicktype-coreのGoレンダラーを呼び出して `just-types` と `no-comments` オプションを渡します。プロセス全体はバックエンドサービスに依存しません:入力されたJSONはローカルで解析され、型が推論され、Goコードが生成されて、右側のエディタに表示されます。
型推論はJSONからGoへの標準的なマッピングに従います:文字列は `string`、ブール値は `bool`、整数は `int64`、浮動小数点数は `float64`、配列はスライス `[]T`、オブジェクトは独立したstruct、`null` は `interface{}` にマッピングされます。ネストされたオブジェクトは再帰的に処理され、階層関係が明確に保たれます。
手書きと比較して、ツールによって生成されるコードは「実行可能な最初のドラフト」です。開発者は通常、ルート型名、パッケージ名、フィールド型の精度(int64をintに変更するなど)、ポインタ型を使用するかどうかを微調整するだけで、実際のGoプロジェクトに配置できます。ワンクリックコピーとmodel.goのダウンロードにより、連携やモデリング段階での繰り返しの作業を大幅に削減できます。
ツールによって生成されたstructをプロジェクトにコピーした後、encoding/jsonを使用してAPIレスポンスを直接デシリアライズできます。
package main
import (
"encoding/json"
"fmt"
)
// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
func main() {
data := []byte(`{
"id": 1,
"name": "Alice",
"tags": ["admin", "dev"],
"address": {"city": "Beijing"}
}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
panic(err)
}
fmt.Println(u.Name, u.Address.City)
}APIによっては一部のフィールドが存在しない場合があります。対応するフィールドをポインタ型に変更するか、omitemptyタグと組み合わせて使用できます。
package main
import "encoding/json"
// 手动将字段改为指针,缺失时值为 nil
type User struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
}
func main() {
data := []byte(`{"id": 1, "name": "Bob"}`)
var u User
json.Unmarshal(data, &u)
if u.Email == nil {
println("Email 字段缺失")
}
}左側の入力ボックスにJSONコンテンツを貼り付けると、ツールは400ms以内に自動的に変換し、右側に生成されたGo structを表示します。また、.json/.txtファイルをドラッグ&ドロップでアップロードするか、「サンプル」をクリックして内蔵データを読み込むこともできます。変換が完了したら、ワンクリックでmodel.goファイルをコピーまたはダウンロードできます。
はい、含まれます。このツールはquicktype-coreに基づいてGoコードを生成し、デフォルトで各structフィールドに `json:"元のフィールド名"` タグが付与されるため、encoding/jsonのUnmarshal/Marshalを使用してシリアライズとデシリアライズを直接行うことができます。
はい、変換されます。JSON配列は要素の型に基づいて対応するスライス型を生成します。例えば `["a","b"]` は `[]string`、`[1,2,3]` は `[]int64`、`[{...},{...}]` は `[]UserItem` のようなカスタム型を生成します。
はい、生成します。各ネストされたオブジェクトは再帰的に独立したstruct型を生成し、命名はPascalCaseを使用します。例えば `address` オブジェクトは `Address` structを生成し、メインstructでは `Address Address` フィールドを介して参照されます。
JSONのnull値は通常 `interface{}` と推論されます。これは安全なフォールバック型です。そのフィールドの実際の型がわかっている場合は、JSONにサンプル値を追加して再生成した後、手動で具体的な型に調整できます。
はい、できます。ツールはデフォルトでルート型名(Userなど)を使用します。設定でルート型名を変更すると、関連するすべてのサブタイプの命名が同期して更新され、ダウンロードするファイル名もそれに応じて変更されます。
ツールはJSONの正当性を自動的に検出します。末尾のカンマ、シングルクォート、引用符の欠落などの一般的なエラーが存在する場合、「JSONを修復」ボタンが表示されます。クリックすると、ツールは自動的に修復を試みてGo structを再生成します。修復できない場合は、具体的なエラー位置が表示されます。
いいえ、アップロードされません。JSONの解析、型推論、Goコードの生成はすべてブラウザ内でWeb Workerを介して行われ、入力コンテンツと生成されたコードがサーバーにアップロードされたり、クラウドに記録されたりすることはありません。APIキー、トークン、ビジネスデータを含む機密性の高いJSONでも安心して使用できます。
はい、できます。生成されるコードは標準的なGo structで、jsonタグが付いているため、プロジェクトのtypes/またはmodels/ディレクトリに直接コピーして使用できます。プロジェクトの命名規則に合わせて、型名やパッケージ名を微調整することを推奨します。
完全に無料で、登録やログインは不要です。ページを開くとすぐに使用でき、機能制限、ウォーターマーク、強制的なログインはありません。
ツールには厳密なファイルサイズ制限はありませんが、変換速度とレンダリングパフォーマンスはブラウザとデバイスのパフォーマンスに依存します。最高の体験を得るために、1MB以内のJSONを処理することを推奨します。超大きなJSONは、事前にJSONフォーマッターや分割ツールで処理することができます。
いいえ、なりません。ツールは整数と浮動小数点数を区別します:整数フィールドはint64を生成し、浮動小数点フィールドはfloat64を生成します。int、uint64などのより具体的な型を使用したい場合は、生成後に手動で置き換えることができます。
左側の入力ボックスが空であるか、空白文字のみが含まれています。有効なJSONを貼り付けるか、「サンプル」をクリックしてデータを読み込むか、.json/.txtファイルをドラッグ&ドロップでアップロードしてください。
入力ボックスの下にある「JSONを修復」ボタンをクリックすると、ツールは末尾のカンマ、シングルクォート、引用符の欠落、JSスタイルのオブジェクトなどの問題を自動的に修復しようとします。修復後、変更された結果がハイライト表示されます。
ツールはJSONキーに基づいてPascalCaseのフィールド名を生成します。キーに日本語や特殊文字が含まれている場合、エスケープされたフィールド名が生成されることがあります。JSONキーを英小文字またはsnake_caseに変更し、生成後に統一的に調整することを推奨します。
nullからは具体的な型を推論できないため、ツールはフォールバックとしてinterface{}を使用します。元のJSONでそのフィールドにサンプル値(""や0など)を指定して再生成した後、string/int64などの実際の型に変更できます。
ブラウザが超大きなJSONと多数のstructをレンダリングすると、多くのメモリを消費します。推奨事項:① キーとなるフィールドのサンプルJSONのみを保持する;② 複数のオブジェクトに分割してそれぞれ変換する;③ メモリを消費している他のページのタブを閉じる。
配列が空[]であるか要素の型が一致しない場合、ツールはフォールバックとしてinterface{}を使用します。同じ型のサンプル要素を追加するか、生成後に手動で[]string、[]int64などの具体的なスライス型に変更できます。
このツールはJSON値の型に基づいて対応するGo型を自動的に推論します。一般的なマッピング関係は以下の通りです:
| JSON値の例 | 生成されるGo型 | 説明 |
|---|---|---|
"hello" | string | 文字列は直接マッピング |
true / false | bool | ブール値 |
42 | int64 | 小数点のない数値 |
3.14 | float64 | 小数点を含む数値 |
null | interface{} | 具体的な型を推論できない場合の安全なフォールバック |
["a","b"] | []string | 文字列配列 |
[1,2,3] | []int64 | 整数配列 |
[{...},{...}] | []UserItem | オブジェクト配列。要素の型は再帰的に生成 |
{"id":1} | User | オブジェクトは独立したstructを生成 |
ツールはデフォルトでint64とfloat64を使用します。実際のプロジェクトでは必要に応じて調整できます:
| シナリオ | 推奨される型 | 理由 |
|---|---|---|
| 通常の整数ID、カウント | int64 | ツールのデフォルトと一致し、ほとんどのJSON数値と互換性があります |
| データベースの自動インクリメント主キーで正の値がわかっている場合 | uint64 | 負の値を回避し、セマンティクスがより明確になります |
| 32ビットシステムまたは明確に小さい範囲の整数 | int32 | メモリ使用量を削減します |
| 価格、緯度経度、科学計算 | float64 | ツールのデフォルトと一致し、標準的な浮動小数点精度です |
| 正確な通貨計算 | decimal.Decimal / int | float64には精度リスクがあるため、shopspring/decimalまたは分単位のintを使用することを推奨します |
このJSONからGoツールのすべての処理はブラウザローカルで完全に実行されます:JSONの解析、型推論、Goコードの生成はすべてWeb Workerを介してクライアント側で実行され、入力されたJSONコンテンツ、アップロードされたファイル、生成されたGoコードがサーバーにアップロードされたり、クラウドに記録、キャッシュ、保存されたりすることはありません。ページを閉じるか更新すると、すべての入力と出力のコンテンツはメモリから自動的に消去され、localStorageにのみ最近の入力履歴が保持されます(いつでも消去できます)。APIキー、トークン、機密性の高いビジネスデータを含むJSONの処理に適しています。