-
JSON
をデコードする時にjson.Unmarshal
とjson.NewDecoder
を使っているパターンがあって、どっち使えばいいねんって人向けに書きました - ここに詳しく書いてありました
結論
- ストリームから情報を読み込んだ時は
json.NewDecoder
を使おう! - それ以外の場合は
json.Unmarshal
を使おう!
解説
- どちらでも大まかな流れとして
- デコードしたものを格納する
Struct
を用意する - 用意した
Struct
へのポインタをメソッドに渡し、デコード情報を流し込んでもらう
- デコードしたものを格納する
という所は変わらない
- 今回は便宜上、データを格納する
dataStruct
という型がある前提で話を進める
json.NewDecoder
について
-
http.Get
で帰ってきたresp.Body
などの io.Reader型に対して使う - 主な使い道としては、今あげた
http.Get
のレスポンス処理がほとんどだと思う
resp, err := http.Get("http://api.sample")
// 中略
var d dataStruct
if err := json.NewDecoder(resp.Body).Decode(&d); err != nil {
// ...
}
json.Unmarshal
について
-
[]byte
型のデータをデコードする - ストリームの関係ない所(極端な話、自分で作ったJSON型の文字列をデコードしたい場合など)で使う
var jsonStr = `{"Name":"Bob","Age":"24"}`
var d dataStruct
json.Unmarshal([]byte(jsonStr), &d)