AI Summary 11.17217.2 golang json摘要 2026-08-14
json.Unmarshal 用于将 JSON 数据解码为 Go 数据结构的函数 支持解析 JSON 数组,可以将 JSON 数组映射到 Go 的切片或数组中

golang json.Unmarshal 数组

示例 解析 JSON 数组

package main
import (“encoding/json”“fmt”)
package main
import (
   "encoding/json"
   "fmt"
)
type Person struct {
   Name string `json:"Name"`
   Age int `json:"Age"`
}
func main() {
   // JSON 数组字符串
   jsonArrStr := []byte(`[
       {"Name": "Alice", "Age": 30},
       {"Name": "Bob", "Age": 25}
   ]`)
   // 定义一个切片来存储解析结果
   var people []Person
   // 使用 json.Unmarshal 解析 JSON 数组
   err := json.Unmarshal(jsonArrStr, &people)
   if err != nil {
       fmt.Println("Error:", err)
       return
   }
   // 输出解析结果
   for _, person := range people {
       fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
   }
}


输出结果:
Name: Alice, Age: 30
Name: Bob, Age: 25

解析动态数组
如果 JSON 数组的结构未知,可以将其解析为 []map[string]interface{} 类型:

package main
import (
   "encoding/json"
   "fmt"
)
func main() {
   // JSON 数组字符串
   jsonArrStr := []byte(`[
       {"Name": "Alice", "Age": 30},
       {"Name": "Bob", "Age": 25}
   ]`)
   // 使用 map 切片存储动态结构
   var data []map[string]interface{}
   // 解析 JSON 数组
   err := json.Unmarshal(jsonArrStr, &data)
   if err != nil {
       fmt.Println("Error:", err)
       return
   }
   // 输出解析结果
   for _, item := range data {
       fmt.Println(item])

   }
}


输出结果:
map[Name:Alice Age:30]
map[Name:Bob Age:25]

空数组处理:如果 JSON 是空数组([]),json.Unmarshal 会将目标切片设置为一个新的空切片,而不是 nil。
类型匹配:确保目标切片的类型与 JSON 数据的结构一致,否则会导致解析失败。
嵌套数组:对于多维数组,可以使用嵌套切片或结构体来解析。
总结
固定结构的数组
动态结构的数组,都可以通过适当的目标类型进行解析