encoding
encoding
https://golang.org/pkg/encoding/
データをバイト列とテキストに相互変換するためのインタフェースを定義する。
encoding/json
https://golang.org/pkg/encoding/json/
RFC 7159で定められたJSONフォーマット仕様に従うエンコード・デコード機能を実装する。
Example:
blob := `["gopher","armadillo","zebra","unknown","gopher","bee","gopher","zebra"]`
var zoo []Animal
if err := json.Unmarshal([]byte(blob), &zoo); err != nil {
log.Fatal(err)
}
公式リソース:
関連項目:
参考:
structタグの使い方
リファレンス: https://golang.org/pkg/encoding/json/#Marshal
json
タグの最初の値がJSONのキー名として使われる。
他には以下のタグが指定できる。
tag | Marshal(エンコード)時 | Unmarshal(デコード)時 |
---|---|---|
omitempty | ゼロ値であれば出力しない | ゼロ値であれば無視される |
- | 出力しない | 無視される |
string | 出力時にクォートされる | クォートされていても型に合わせて変換する。クォートされてないとエラー |
Examples:
type User struct {
ID string // JSONキー名は "ID"
Login string `json:"login"` // JSONキー名は "login"
Password string `json:"pasword,-"`
Sex SexType `json:"sex,omitempty"`
Age int `json:"age,string"`
}
関連項目:
参考:
pretty print
後述のMarshalIdentや、json.EncoderのSetIndentを使う。
参考:
func Marshal
https://golang.org/pkg/encoding/json/#Marshal
func Marshal(v interface{}) ([]byte, error)
vをJSONに変換したバイト列を返す。
Example:
type ColorGroup struct {
ID int
Name string
Colors []string
}
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
b, err := json.Marshal(group)
//=> {"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
NOTE:
- 構造体やmapしか扱えないわけではなく、任意の型の値を変換可能
func MarshalIndent
https://golang.org/pkg/encoding/json/#MarshalIndent
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
Examples:
data := map[string]int{
"a": 1,
"b": 2,
}
json, err := json.MarshalIndent(data, "<prefix>", "<indent>")
/*
{
<prefix><indent>"a": 1,
<prefix><indent>"b": 2
<prefix>}
*/