-
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)