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 的真實形狀,把它機械地攤開正是本工具的用武之地。產生的值只是各型別的代表值,用前請換成有意義的資料。

使用方法

  1. 貼入結構體定義 幾個相關的結構體一併貼入也無妨。
  2. 指明要用的結構體 有多個時請指定;留空則採用第一個結構體。
  3. 查看產生的 JSON 巢狀的結構體與切片都會完整攤開。
  4. 換上自己的值 裡頭填的是代表值,請換成合乎用途的資料。

用好本工具的小技巧

  • 一次貼上多個 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 中,其欄位與父層的鍵處於同一層。

常見問題

手動將 Go 的 API 響應 struct 轉換為 JSON 很容易出錯,尤其是巢狀層級較深時,欄位型別或 json 標籤很容易理解錯誤。自動生成可以讓你更快地向前端或 QA 團隊提供準確的示例資料。

如果在輸入內容中找不到所引用 struct 的定義,該欄位的值會輸出為空物件 {},並在頁面上顯示警告資訊。將定義所在的 struct 一併貼上即可正確生成巢狀示例。

omitempty 只是 Go 端在編碼時省略零值的指示,因此對應的鍵仍會照常出現在示例 JSON 中。而標記為 json:"-" 的欄位在編碼時會被完全排除,因此也不會出現在示例 JSON 裡。

沒有,它們只是滿足型別要求的佔位符。字串為 "example",整數為 1,浮點數為 1.5,布林值為 true,都是固定值,實際使用時請自行替換。

不是。本工具是基於正規表示式和逐行分析的簡易解析器,並未使用真正的 Go 語法解析器(AST)。因此不支援跨多行的型別定義或匿名巢狀 struct 等複雜寫法,請將其視為快速生成草稿的工具。
工具君

閒話 ― 與「JSON 轉 Go 結構體」正好相反的思路

在用 Go 開發 Web API 時,響應結構通常由 struct 與 json 標籤組合定義。但當前端開發者或 QA 工程師想確認 API 的實際表現時,閱讀 Go 程式碼並在腦中逐個把欄位型別換算成 JSON 是一件既費時又容易出錯的工作。

本工具正好與姊妹工具「JSON 轉 Go 結構體」方向相反:只需貼上 Go 的 struct 定義,就能根據 json 標籤生成對應的鍵名,並按欄位型別填入佔位值,生成可直接用於 Postman 示例或前端模擬資料的 JSON。

不過本工具並非真正的 Go 編譯器,而是基於正規表示式與逐行分析的簡易解析器。它能處理簡單的欄位定義,以及在同一輸入中一併貼上的巢狀 struct,但對於匿名巢狀 struct 或跨多行的型別定義等複雜寫法可能無法正確解析。請將其作為草稿參考,並結合實際 Go 原始碼確認最終結構。