Golangのjson.UnmarshalでJSONをデコードできない
問題
以下のコードで、Person構造体のp.name
に"hoge"が入ることを期待してました。
package main import ( "encoding/json" "fmt" ) type Person struct { name string `json:"name"` } func main() { str := `{"name": "hoge"}` var p Person if err := json.Unmarshal([]byte(str), &p); err != nil { fmt.Println(err) return } fmt.Println(p.name) }
しかし、実際にはp.name
は空となってしまいます。
結論
フィールドの先頭を大文字にしよう
type Person struct { Name string `json:"name"` }
これでp.Name
にちゃんと"hoge"が入ります。
当たり前すぎて……ただ、json.Unmarshal
は対応するフィールドが見つからなくてもエラーは出さないため、時間を取られてしまいました。