net/http
と encoding/json
パッケージを使えば簡単にできる。
Jsonをパースした結果を受け取るための構造体をあらかじめ用意してあげる必要はある。
Top Level が配列の場合どうすんだ?って思ったけど、var hoge []構造体
のようにスライスを用意してあげるだけで良かった。
コード
main.go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
)
type Item struct {
Title string `json:"title"`
CreatedAt time.Time `json:"created_at"`
}
func main() {
resp, err := http.Get("http://qiita.com/api/v2/users/snaka/items?page=1&per_page=10")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
var data []Item // nil slice
// data := make([]Item, 0) のように要素数0の slice としても良い
if err := json.Unmarshal(body, &data); err != nil {
log.Fatal(err)
}
for _, item := range data {
fmt.Printf("%s %s\n", item.CreatedAt, item.Title)
}
}
変更(2020.1.31)
- 日付を受け取る箇所を
timt.Time
型にした - Jsonを受け取る変数を nil slice と宣言するようにした
実行結果
2020-01-29 08:24:56 +0900 +0900 Go で Qiita API を叩いてみる
2020-01-19 12:48:10 +0900 +0900 Goの勉強のため自分のグローバルIPを確認するコマンドを作った
2020-01-18 08:44:06 +0900 +0900 AWS認定 Alexa スキルビルダーに合格したので受験の感想など
2020-01-08 23:00:55 +0900 +0900 npm install で har-validator-5.1.2.tgz が Not Found と言われた
2020-01-07 08:42:34 +0900 +0900 GoでSTUNサーバを使って自分のパブリックIPアドレスを取得
2020-01-05 05:12:38 +0900 +0900 WSL2内で立ち上げたサーバにWindows側からlocalhostで接続する2020-01-04 22:23:55 +0900 +0900 Docker コンテナ内で立ち上げた godoc にホスト側からアクセスできなかった
2019-05-22 17:52:46 +0900 +0900 Cludfront + API Gateway + Lambda の環境でうまくいかない場合のレスポンスとその原因
2019-05-21 10:09:25 +0900 +0900 API Gateway で作成したAPIを独自に用意したCloudFrontディストリビューションで公開する
2019-04-04 17:18:48 +0900 +0900 API Gateway のエンドポイントを nginx で reverse proxy したら"SSL_do_handshake() failed" と言われた