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スライスに変換することで、範囲ベースの反復とコンパイル時のフィールドアクセスが可能になります。

試してみる — JSON to Go Struct Converter

フルツールを開く