JSON 轉 Go 是把 JSON 格式的資料自動轉換為 Go 語言 struct 類型定義的過程。JSON 是 REST API、設定檔、訊息佇列和日誌中最常見的資料交換格式,而 Go 是一門強類型語言,開發中經常需要把 JSON 的動態結構映射為 struct 才能用 encoding/json 進行反序列化。手寫 struct 尤其是巢狀物件時容易漏欄位或寫錯類型,這個工具就是要把重複勞動自動化。
Go 的 struct 是複合資料類型,用 `type Name struct { ... }` 宣告。每個欄位由名稱和類型組成,欄位名必須大寫開頭才能被其他套件存取,也就是所謂「可匯出識別符」。工具會自動把 JSON 的欄位名轉為 PascalCase 的匯出欄位名,例如 `user_name` 會映射為 `UserName`,並保留原始 key 在 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 金鑰、token 或業務資料的敏感 JSON 也可以放心使用。
可以。生成的程式碼是標準 Go struct,帶有 json 標籤,可直接複製到專案的 types/ 或 models/ 目錄下使用。建議根據專案命名規範微調類型名和套件名。
完全免費,無需註冊或登入。打開頁面即可使用,沒有任何功能限制、浮水印或強制登入。
工具沒有嚴格的檔案大小限制,但轉換速度和渲染效能取決於瀏覽器與裝置效能。建議處理 1MB 以內的 JSON 以獲得最佳體驗;超大 JSON 可先透過 JSON 格式化或拆分工具處理。
不會。工具會區分整數和浮點數:整數欄位生成 int64,浮點數欄位生成 float64。如果希望使用 int、uint64 等更具體的類型,可在生成後手動替換。
左側輸入框為空或只有空白字元。請貼上有效 JSON,或點擊「範例」載入資料,或拖曳上傳 .json/.txt 檔案。
點擊輸入框下方的「修復 JSON」按鈕,工具會自動嘗試修復尾隨逗號、單引號、缺引號、JS 風格物件等問題。修復後會高亮顯示修改後的結果。
工具會按 JSON key 生成 PascalCase 欄位名。如果 key 包含中文或特殊字元,可能會生成轉義後的欄位名。建議把 JSON key 改為英文小寫或 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 金鑰、token、敏感業務資料的 JSON。