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 数据的结构一致,否则会导致解析失败。
嵌套数组:对于多维数组,可以使用嵌套切片或结构体来解析。
总结
固定结构的数组
动态结构的数组,都可以通过适当的目标类型进行解析