JSON配列からGoスライスへの変換
JSON配列がGoスライスにどのように変換されるかを学びます。プリミティブの配列、オブジェクトの配列、混合型の配列を実際の例で解説します。
Basic Structs
詳細な説明
JSON配列からGoスライスへの変換
JSON配列はGoスライスにマッピングされます。スライスの要素型は配列の内容から推論されます。文字列の配列は []string に、オブジェクトの配列は名前付き構造体型のスライスになります。
プリミティブ配列
{
"tags": ["go", "json", "api"],
"scores": [95, 87, 92]
}
type AutoGenerated struct {
Tags []string `json:"tags"`
Scores []int `json:"scores"`
}
オブジェクトの配列
{
"users": [
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
]
}
type AutoGenerated struct {
Users []User `json:"users"`
}
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
コンバーターは最初の要素を検査するか、すべての要素をマージしてオブジェクト配列の構造体フィールドを決定します。要素の形状が一貫していない場合、すべてのフィールドの和集合を生成し、一部の要素にのみ存在するフィールドにはポインタ型を使用します。
空の配列
空のJSON配列 [] は曖昧です — コンバーターは要素型を判別できません。多くのコンバーターはこの場合 []interface{} をデフォルトとします。期待されるデータがわかったら手動で正しい型を設定してください。
ネストされた配列
配列の配列([[1,2],[3,4]])はGoでは [][]int になります。このパターンは行列データ、座標ペア、バッチ操作で使用されます。
スライスの操作
for _, user := range response.Users {
fmt.Printf("User %d: %s\n", user.ID, user.Name)
}
Goスライスは読み取り時にnilセーフです — nilスライスの反復は0回のイテレーションを生成するため、明示的なnilチェックはほとんど不要です。
ユースケース
ページネーションされたAPIレスポンス、リストエンドポイント、バルク操作はすべてオブジェクトの配列を返します。これらを型付きGoスライスに変換することで、範囲ベースの反復とコンパイル時のフィールドアクセスが可能になります。