JSONを扱うときにkeyとfieldを対応づける
Goの、encoding/json
の Unmarshal
で、例えばJSONデータのkeyが小文字の場合、自動でcapitalizeしてくれる。
pakcage main import( "encoding/json" ) type A struct { A_Id int Field string } func main() { jsonBlob := []byte(` {"a_id": 100, "field": "field"} `) var a A json.Unmarshal(jsonBlob, &a) fmt.Printf("%+v\n", a) }
ここで、JSONの要素にsnake_caseなa_id
がkeyになっている。
Goが変数や、構造体のフィールド名はCamelCaseを推奨しているので、CamelCaseなフィールド名にしたい。
type A struct { AId int Field string }
Goのドキュメントを読んでいると、
type A struct { AId int `json:"a_id"` Field string `json:"field"` }
と書いておくと、UnmarshalしたときにKeyに紐づくフィールドを認識してくれることを知る。 文法として、Goのstructはフィールドにtag(型はstring)を付与でき、この情報はreflectで取得できる。
func main() { a := A{} t := reflect.TypeOf(a) field := t.Field(0) fmt.Println(field.Tag.Get("json")) //=> a_id }
便利。