LoginSignup
89
49

More than 3 years have passed since last update.

Golangの`json.Unmarshal`と`json.NewDecoder`の使い分けについて

Last updated at Posted at 2018-05-26
  • JSONをデコードする時にjson.Unmarshaljson.NewDecoderを使っているパターンがあって、どっち使えばいいねんって人向けに書きました
  • ここに詳しく書いてありました

結論

  • ストリームから情報を読み込んだ時はjson.NewDecoderを使おう!
  • それ以外の場合はjson.Unmarshalを使おう!

解説

  • どちらでも大まかな流れとして
    1. デコードしたものを格納するStructを用意する
    2. 用意した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)
89
49
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
49