開發者 / JSON

JSON 轉 Go Struct

貼上 JSON 範例,取得含有匯出欄位名稱、Go linter 預期的縮寫格式與 json 標籤的 Go struct 定義,可直接貼到程式碼中。

JSON 轉 Go Struct: 這個轉換器會在瀏覽器中讀取 JSON,並為每個物件建立一個 struct。鍵會轉成匯出的 CamelCase 名稱,ID、URL 和 HTTP 等縮寫會依 golint 的建議使用大寫;每個欄位也會保留原始鍵,放在 json 標籤中,格式則按照 gofmt 的排版方式呈現。陣列中的物件會合併處理,因此某些物件缺少的鍵會加上 omitempty,而有些物件中的鍵值為 null 時,該欄位會變成指標。同一位置只要出現小數,整數就會轉成 float64;否則整數會轉成 int64。 全程在瀏覽器中於本機執行,檔案不會上傳至伺服器。

使用次數
在瀏覽器中
費用
免費・免註冊
可用狀態
可立即使用
JSON轉Go結構本機處理

全程在瀏覽器中執行

前往

type User struct {
	ID        int64    `json:"id"`
	UserName  string   `json:"user_name"`
	AvatarURL string   `json:"avatar_url"`
	Score     float64  `json:"score"`
	Tags      []string `json:"tags"`
	Address   Address  `json:"address"`
}

type Address struct {
	City    string `json:"city"`
	ZipCode string `json:"zip_code"`
}

陣列中部分物件缺少的鍵會加上omitempty;有時為null的鍵會轉為指標。請依照您API的文件確認型別:範例只會顯示其中包含的內容。

從範例到型別

Go會使用encoding/json將JSON解碼為結構,並依照json標籤將每個鍵對應到欄位;如果沒有標籤,則會忽略大小寫,依名稱進行對應。只有匯出的欄位,也就是以大寫字母開頭的欄位,才會被填入,因此這裡的每個欄位都以大寫字母開頭,並在標籤中保留原始鍵。

單一範例只能顯示其中包含的內容。若一份使用者清單中有一位使用者沒有email,轉換器就能判斷email是選填項目;單一物件則無法判斷。若有多個具代表性的物件,請將它們貼在陣列中,並對照API文件檢查結果。JSON格式化工具可以先協助你看清長篇回應的結構。

其他語言和結構描述

同一份範例可以透過JSON轉TypeScript轉換成TypeScript介面,供讀取相同API的前端使用;也可以轉成JSON Schema,在資料進入系統的邊界進行驗證。

使用方式

  1. 貼上 JSON 物件或陣列,例如 API 回應。
  2. 命名頂層型別,並選擇使用獨立或巢狀 struct。
  3. 複製 Go 程式碼。

隱私與限制

您的 JSON 會在瀏覽器中轉換,絕不上傳。

相關工具

常見問題

為什麼 user_id 會變成 UserID,而不是 UserId?

Go 的風格會將縮寫統一使用同一種大小寫,因此會寫成 UserID、APIKey 和 AvatarURL。這個轉換器採用 golint 的縮寫清單;golint 是推廣這項規則的 linter。

欄位什麼時候會加上 omitempty 或變成指標?

當範例是由多個物件組成的陣列,且某個鍵在部分物件中缺少時,該欄位會加上 omitempty,進行 marshalling 時如果欄位為空就會省略。當某些物件中的鍵值為 null 時,該欄位會變成指標,讓 nil 可以代表 null。您也可以為每個欄位加上 omitempty。

為什麼會使用 int64 和 float64?

JSON 只有一種數字型別。不含小數點的值會變成 int64,含有小數的值則會變成 float64。如果 ID 可能超過 2^53,或實際上是偽裝成數字的字串,請手動修改型別:範例只能顯示其中包含的值。

null 或空陣列會怎麼處理?

如果沒有足夠的資訊可供判斷,永遠是 null 的欄位或空陣列會使用 any(interface{})型別,接受任何內容。確定實際型別後,請將它替換掉。

免費工具・使用在瀏覽器中次・免註冊