Go言語学習もいよいよ17日目!
今日はJSONデータの扱い方を学ぼうかと。。
今まではコチラ
Xで黒板の文字が適当という返信をいただきました。 GPTに任せすぎましたね。。
- 構造体 ⇔ JSON の変換
- APIサーバーでJSONレスポンスを返す
この2つができると、「GoでAPI開発できる感」が一気にアップする気がする。。。
まずは基本:構造体をJSONに変換してみる(Marshal)
Goでは、encoding/json
パッケージを使えば、簡単にJSON変換ができるようです。
サンプルコード
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` } func main() { user := User{"たろう", 30, "taro@example.com"} jsonData, err := json.Marshal(user) if err != nil { fmt.Println("エラー:", err) return } fmt.Println(string(jsonData)) }
実行結果:
{"name":"たろう","age":30,"email":"taro@example.com"}
ポイント
json.Unmarshal
は JSON文字列 → 構造体 に変換- 第2引数は「ポインタ型」で渡す(&user)ことに注意!
JSON文字列を構造体に変換する(Unmarshal)
サンプルコード
func main() { data := `{"name":"はなこ","age":25,"email":"hanako@example.com"}` var user User err := json.Unmarshal([]byte(data), &user) if err != nil { fmt.Println("エラー:", err) return } fmt.Printf("名前: %s|年齢: %d|メール: %s\n", user.Name, user.Age, user.Email) }
実行結果:
名前: はなこ|年齢: 25|メール: hanako@example.com
ポイント
json.Unmarshal
は JSON文字列 → 構造体 に変換- 第2引数は「ポインタ型」で渡す(&user)ことに注意!
応用:APIエンドポイントからJSONを返してみる!
昨日学んだ net/http
と組み合わせれば、APIサーバーからJSONレスポンスも簡単に作る。
サンプルコード
package main import ( "encoding/json" "net/http" ) type Message struct { Status string `json:"status"` Message string `json:"message"` } func jsonHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") res := Message{ Status: "success", Message: "これはJSONレスポンスです!", } json.NewEncoder(w).Encode(res) } func main() { http.HandleFunc("/api/message", jsonHandler) http.ListenAndServe(":8080", nil) }
動作確認
ブラウザまたはcurlでアクセス!
curl http://localhost:8080/api/message
{"status":"success","message":"これはJSONレスポンスです!"}
ポイント
w.Header().Set("Content-Type", "application/json")
でレスポンスの型を指定json.NewEncoder(w).Encode(res)
でそのままJSONを返せる!
今日のまとめ
Go言語17日目の学習ポイント
json.Marshal
で構造体 → JSON文字列json.Unmarshal
で JSON文字列 → 構造体- APIエンドポイントからJSONレスポンスを返す方法
- GoはJSON操作が得意で、標準パッケージだけで完結するのが嬉しい
この記事は広告を含みます。