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のキー名として使われる。
他には以下のタグが指定できる。

tagMarshal(エンコード)時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>}
*/

https://play.golang.org/p/6jHI-MRx0z