Go言語(golang)の構造体とJSON
構造体のタグを使ってJSONのフィールド名/オプションを指定する
jsonのパースなど詳しい使い方は Go言語 JSON Marshal, Unmarshal, NewDecoder, NewEncoder の使い方
に書きましたのでそちらをどうぞ。
目次
構造体のタグの指定方法
構造体にJSONのタグを指定する
以下のようにカンマ区切りでフィールド名とオプションを指定する
type User struct { Name string `json:"[JSONのフィールド名],[オプション]"` }
オプションの種類
オプションとして指定可能な値
omitempty
構造体の値が初期値だった場合は、JSONに出力されない
初期値とは string型なら空文字、int型なら 0 などstring
JSONに変換する場合は 文字列型 とし、
JSONから構造体などにマッピングするときは、指定した型にする-
構造体の値がなんであろうと、JSONとして出力しない
- をJSONのフィールド名にしたい場合はjson:"-,"
とする
タグの使い方と説明
type PhoneticCode struct { // 構造体のフィールド名の先頭が小文字の場合は、 // Marshal, Unmarshal ともに無視される alpha string // タグを指定しない場合は、 // 構造体のフィールド名 "Bravo" がそのまま使われ // "bravo" のように先頭が小文字でもよい Bravo string // 上に同じ // タグのフィールド名が空の場合は、 // 構造体のフィールド名が使われる // この場合は "Charlie" になる Charlie string `json:""` // 上に同じ Delta string `json:","` // タグのフィールド名 ("echo") でJSONに変換される // JSONから構造体にマッピングする場合は、先頭が大文字 "Echo" でも良い Echo string `json:"echo"` // string型なので、値が空文字だった場合は変換されない Foxtrot string `json:"foxtrot,omitempty"` // JSONに変換した場合は string型 として変換される // 構造体にマッピングする場合は int型 になる Golf int `json:"golf,string"` // JSON、構造体 のどちらへ変換しても無視される Hotel string `json:"-"` // JSONのフィールド名を "-" にする // `json:"-"` のエスケープ India string `json:"-,"` // JSONにフィールド名がない場合は nil のまま Juliet *string `json:"juliet"` // 以下どちらでも、JSONに変換した場合は ナノ秒 からの桁になる Kilo time.Duration `json:"kilo,string"` Lima time.Duration `json:"lima"` }