課題
JSONをAPIサーバーを作成中である。構造体を外部アクセスさせるためには大文字で変数を定義する必要があるが、そうするとJsonにMarchalした際に大文字になってしまう。返す際にKey名を小文字で返すにはどうすれば良いか
{ "Id": 1, "Name": "Taro" "Job": "Writer" }
対策
json:で別名を定義する
type Item struct { Id int `json:"id"` Name string `json:"name"` Job string `json:"職業"` }
こうなる
{ "id": 1, "name": "Taro", "職業": "Writer" }
別名なので、小文字だけでなく任意に設定が可能。
package main import ( "fmt" "encoding/json" "net/http" ) type Item struct { Id int `json:"id"` Name string `json:"fuga"` Job string `json:"職業"` } func main() { fmt.Println("Strart Server") http.HandleFunc("/", ShowIndex) http.ListenAndServe(":8080", nil) } func ShowIndex(w http.ResponseWriter, r *http.Request) { item := Item{Id:1, Name: "Taro", Job: "Writer"} text, err := json.Marshal(item) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } w.Header().Set("Content-Type", "application/json") w.Write(text) }