NEMAPIをGo言語で叩く(2)
以前こちらの記事でGo言語を用いてNEMのAPIを叩きましたが、
この時点では生のjsonを文字列として表示しただけでした。
今回はjsonをパースし、構造体に代入する部分までを行います。
ソースコード
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Heartbeat struct {
Code int `json:"code"`
Type int `json:"type"`
Message string `json:"message"`
}
func main() {
resp, err := http.Get("http://alice2.nem.ninja:7890/heartbeat")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
var heartbeat Heartbeat
if err := json.Unmarshal(body, &heartbeat); err != nil {
fmt.Println(err)
return
}
fmt.Println(heartbeat)
}
実行結果
{1 2 ok}
解説
encoding/jsonパッケージに含まれるjson.Unmarshal()を利用します。
これの第一引数にjsonを、第二引数にjsonを表現した構造体の変数のポインタを
渡すと、構造体の対応する変数内にデータが格納されます。
jsonを表現した構造体は、複雑になってくると手打ちで書くのが大変になるので
こちらで自動生成することをおすすめします。
余談ですが、このコードを制作している時に、構造体の変数は頭文字が大文字
だとpublic、小文字だとprivateという仕様に気が付かず、なぜか正しい値
が出てこないと30分ほど悩みました。まだまだ勉強あるのみですね。
参考
Qiita - Go言語でJSONに泣かないためのコーディングパターン
Qiita - Go言語でのJSONデータの扱い【備忘録】