在開發網站或網路應用程式時,經常需要透過 API 的形式傳回 JSON 資料。因此,掌握如何在 Golang 中傳回 JSON 資料至關重要。
本文將介紹 Golang 的 json 套件及其基本用法,以及如何使用它來將 Golang 資料結構編碼為 JSON 字串或將 JSON 字串解碼為 Golang 資料結構。
在 Golang 程式中,使用 json 套件操作 JSON 資料非常簡單。可以將 JSON 字串解析為 Golang 變量,也可以將 Golang 變數編碼為 JSON 字串。
在Golang 程式中,如果需要將Golang 變數編碼為JSON 字串,可以使用json.Marshal() 函數來完成這個任務。以下是一個範例程序,示範如何將Go 結構體編碼為JSON 字串:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string Age int } func main() { p := Person{"Tom", 30} b, err := json.Marshal(p) if err != nil { fmt.Println("error:", err) return } fmt.Println(string(b)) }
輸出結果為:
{"Name":"Tom","Age":30}
在上面的範例程式中,Person 結構體包含兩個字段Name 和Age。我們將其實例化為一個名為 p 的變量,並將其傳遞給 json.Marshal() 函數。函數將傳回一個 JSON 字串的位元組數組及一個可選的錯誤。
如果JSON編碼失敗,將會傳回一個非空錯誤。在上述範例中,我們檢查錯誤並輸出錯誤訊息。
注意:使用 json.Marshal() 編碼 JSON 字串時,JSON 欄位的名稱是結構體欄位的名稱,必須大寫字母開頭。
在Golang 程式中,如果需要將JSON 字串解碼為Golang 變量,可以使用json.Unmarshal() 函數。以下是一個範例程序,示範如何將JSON 字串解碼為Go 結構體:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string Age int } func main() { jsonStr := `{"Name":"Tom","Age":30}` var p Person err := json.Unmarshal([]byte(jsonStr), &p) if err != nil { fmt.Println("error:", err) return } fmt.Println(p.Name, p.Age) }
輸出結果為:
Tom 30
在上面的範例程式中,我們將JSON 字串與空的Person 結構體進行解碼。需要將 JSON 字串轉換為位元組數組,該位元組數組會被修改以適應解碼結果。解碼結果將儲存在經過 unmarshal 的變數中。
這裡使用了一個 & 運算符,用於將變數位址傳遞給函數,並將其用於實際結果的修改。
同樣的,如果 JSON 解碼失敗,將會傳回一個錯誤並列印錯誤訊息。
在 Golang 中,可以使用 net/http 套件建立 API,傳回 JSON 資料。以下是一個簡單的範例程序,示範如何使用 Golang 返回 JSON 資料:
package main import ( "encoding/json" "fmt" "net/http" ) type Person struct { Name string Age int } func main() { http.HandleFunc("/person", handlePerson) http.ListenAndServe(":8080", nil) } func handlePerson(w http.ResponseWriter, r *http.Request) { p := Person{"Tom", 30} b, err := json.Marshal(p) if err != nil { fmt.Println("error:", err) return } w.Header().Set("Content-Type", "application/json") w.Write(b) }
在上面的範例程式中,我們建立了一個基本的HTTP伺服器,使用了 net/http 套件。我們使用 http.HandleFunc() 函數來將路徑 /person 和 handlePerson 處理函數進行綁定。
handlePerson 函數傳回了一個具有 Name 和 Age 欄位的 Person 結構體。它將使用 json.Marshal() 函數將 Person 結構體編碼為 JSON 格式。最後,我們使用 http.ResponseWriter 介面來寫入 JSON 回應。在寫入之前,我們使用 w.Header().Set() 函數設定了回應頭的 Content-Type 為 application/json。
現在,你已經知道如何使用 Golang 編碼和解碼 JSON 數據,以及如何在 HTTP 回應中傳回 JSON 資料。學會這些技能將使你在開發網頁應用程式時更加得心應手。
以上是golang怎麼回傳json的詳細內容。更多資訊請關注PHP中文網其他相關文章!