47
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

  • 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)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
47
Help us understand the problem. What are the problem?