Go初心者のJSONタグ活用
Go初心者のためのJSON操作入門
Go言語でデータ交換を行う際、JSONは最も一般的なフォーマットです。Go初心者がJSON操作を始めるには、まず標準ライブラリのencoding/jsonパッケージを理解することが重要です。このパッケージは、構造体をJSON文字列に変換したり、逆にJSON文字列を構造体に変換したりする機能を提供します。
JSON操作の基本は「シリアライズ」と「デシリアライズ」です。シリアライズは構造体をJSON文字列に変換するプロセスで、デシリアライズはJSON文字列を構造体に戻すプロセスです。Goではそれぞれjson.Marshalとjson.Unmarshalという関数で実装されています。
APIを呼び出す際に送受信するデータはJSONで表現されることが多く、GoでAPIを扱う場合はJSON操作が必須になります。以下では具体的なコード例を通じて、JSON操作の流れを解説します。
json.Marshalとjson.Unmarshalの使い方
まず、json.Marshalを使って構造体をJSON文字列に変換する例です。構造体にjsonタグを付けることで、フィールド名の変換やスキップの指定ができます。
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age,omitempty"`
}
u := User{ID: 1, Name: "Alice", Age: 0}
data, err := json.Marshal(u)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(data)) // {"id":1,"name":"Alice"}
次に、json.UnmarshalでJSON文字列を構造体に戻す例です。JSONのキーと構造体のフィールド名が一致しない場合は、jsonタグでマッピングします。
var u User
err := json.Unmarshal(data, &u)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", u) // {ID:1 Name:Alice Age:0}
APIから取得したJSONレスポンスを構造体にデシリアライズする際は、上記の手順を踏むだけで簡単にデータを扱えます。エラー処理を忘れずに行い、JSONの構造が変わった場合に備えてタグを見直すことも重要です。
構造体タグでシリアライズ・デシリアライズをカスタマイズ
構造体タグはJSON操作を柔軟にするための強力なツールです。omitemptyを使うと、ゼロ値のフィールドをJSONから除外できます。また、stringタグを付けると、数値を文字列として扱うことができます。
type Product struct {
ID int `json:"id"`
Price float64 `json:"price,string"`
Tags []string `json:"tags,omitempty"`
}
p := Product{ID: 101, Price: 19.99}
data, _ := json.Marshal(p)
fmt.Println(string(data)) // {"id":101,"price":"19.99"}
さらに、json:"-"タグを付けると、そのフィールドはシリアライズ・デシリアライズの対象外になります。これを利用して、内部でのみ使用するデータをJSONに含めないようにできます。
API設計時にJSONの構造を決める際は、クライアント側の期待とサーバー側の実装を合わせるために、タグを正しく設定することが不可欠です。タグを活用すれば、データ交換の際に余計な情報を送らず、通信量を削減できます。
コメント
コメントを投稿