Go 結構體轉 JSON 示例生成器
貼上帶有 json 標籤的 Go struct 定義,即可自動生成對應的 JSON 示例資料。支援巢狀 struct、切片、omitempty 以及 json:"-",適合用於 API 模擬資料和 Postman 示例。
由 Go 結構體產生 JSON 樣本
要搭 API 的模擬介面,或往 Postman 裡登記一份回應範例時,您總得親手把結構體定義會產出怎樣的 JSON 謄寫出來。本工具只需您貼入 Go 的結構體定義,便把那個形狀產生為樣本 JSON,巢狀結構體、切片、omitempty 與 json:"-" 一併照應。
這裡要緊的是:Go 的欄位名未必就成為 JSON 的鍵。 有 json 標籤時以標籤為準,而帶 json:"-" 的欄位根本不會出現。由於 omitempty 會在值為零值時把欄位丟掉,同一個結構體的兩次編碼,連鍵的陣容都可能不同。 因而單憑肉眼讀定義容易看錯 JSON 的真實形狀,把它機械地攤開正是本工具的用武之地。產生的值只是各型別的代表值,用前請換成有意義的資料。
使用方法
- 貼入結構體定義 幾個相關的結構體一併貼入也無妨。
- 指明要用的結構體 有多個時請指定;留空則採用第一個結構體。
- 查看產生的 JSON 巢狀的結構體與切片都會完整攤開。
- 換上自己的值 裡頭填的是代表值,請換成合乎用途的資料。
用好本工具的小技巧
- 一次貼上多個 struct 時,巢狀欄位的型別會被自動解析並遞迴生成對應的示例物件(若找不到定義則用空物件 {} 代替,並顯示警告)。
- 指定目標 struct 名稱後,即使輸入中包含多個 struct,也能選擇作為根物件的那一個(留空時預設使用第一個出現的 struct)。
- 標記為 json:"-" 的欄位會從 JSON 輸出中排除。帶 omitempty 的欄位仍會照常輸出對應的鍵,如不需要請手動刪除。
- 生成的數值僅是基於型別的佔位符(字串為 "example",數字為 1 等)。若要作為真實的 API 響應示例,請自行替換為實際資料。
- 本工具與姊妹工具「JSON 轉 Go 結構體」正好方向相反。可將 Go 處理函式中定義的 struct 快速轉換為供前端或 QA 團隊使用的示例資料。
這些情境會用到
搭建 API 的模擬介面
在伺服端寫成之前就把回應範例定下來,前端便無須乾等。
往文件裡放範例
可作為貼進 Postman 範例或 OpenAPI 樣本的素材。
確認標籤的效果
omitempty 與 json:"-" 究竟產出什麼,可以看到具體的形狀。
與前端敲定資料形狀
拿出具體的 JSON,比遞過去一份型別定義更不容易生出誤會。
Go 編碼的術語
- json 標籤
- 附在欄位上、形如
json:"user_id"的註解,它為 JSON 一側的鍵命名。 沒有它時便照用欄位名。 - omitempty
- 一項設定,當值為零值時把整個鍵從輸出中略去。 請留意 0 與空字串也會一併被丟掉。
- json:"-"
- 把該欄位擋在 JSON 之外的設定,用來藏起供內部使用的欄位。
- 零值
- 各型別既定的初始值:數值為 0,字串為空,指標與切片為 nil。
- 切片
- 長度可變的序列,在 JSON 中成為陣列。nil 的切片會寫成
null,這一點與空陣列不同。 - 嵌入欄位
- 只寫型別名便把另一個結構體納入的記法。在 JSON 中,其欄位與父層的鍵處於同一層。
常見問題
閒話 ― 與「JSON 轉 Go 結構體」正好相反的思路
在用 Go 開發 Web API 時,響應結構通常由 struct 與 json 標籤組合定義。但當前端開發者或 QA 工程師想確認 API 的實際表現時,閱讀 Go 程式碼並在腦中逐個把欄位型別換算成 JSON 是一件既費時又容易出錯的工作。
本工具正好與姊妹工具「JSON 轉 Go 結構體」方向相反:只需貼上 Go 的 struct 定義,就能根據 json 標籤生成對應的鍵名,並按欄位型別填入佔位值,生成可直接用於 Postman 示例或前端模擬資料的 JSON。
不過本工具並非真正的 Go 編譯器,而是基於正規表示式與逐行分析的簡易解析器。它能處理簡單的欄位定義,以及在同一輸入中一併貼上的巢狀 struct,但對於匿名巢狀 struct 或跨多行的型別定義等複雜寫法可能無法正確解析。請將其作為草稿參考,並結合實際 Go 原始碼確認最終結構。