您的位置:首页 >Go 中解析 JSON 数组与对象的正确方法
发布于2026-02-25 阅读(0)
扫一扫,手机访问

本文详解 Go 语言中解析 JSON 数组与单对象的常见误区,重点说明结构体定义、反序列化方式及输入格式匹配原则,并提供可运行示例与实用建议。
在 Go 中解析 JSON 时,输入 JSON 的实际结构必须与 Go 反序列化目标类型严格一致——这是绝大多数 json.Unmarshal 失败的根本原因。以问题中的数据为例:
[
{
"ShaId": "adf56a4d",
"Regions": [
{ "Name": "us-east-1a" }
]
}
]这是一个 JSON 数组([]object),因此必须使用切片([]ShaInfo)接收;若错误地用单个结构体变量(如 var data ShaInfo)去解析该数组,json.Unmarshal 将返回 invalid character '[' looking for beginning of value 或类似错误。
首先定义清晰、可导出的结构体(字段首字母大写):
type Region struct {
Name string `json:"Name"`
}
type ShaInfo struct {
ShaId string `json:"ShaId"`
Regions []Region `json:"Regions"`
}然后根据 JSON 输入选择对应解码方式:
content := `[{"ShaId": "adf56a4d", "Regions": [{"Name": "us-east-1a"}]}]`
var results []ShaInfo
if err := json.Unmarshal([]byte(content), &results); err != nil {
log.Fatal("解析 JSON 数组失败:", err)
}
fmt.Printf("解析成功,共 %d 条记录: %+v\n", len(results), results)
// 输出: 解析成功,共 1 条记录: [{ShaId:adf56a4d Regions:[{Name:us-east-1a}]}]content := `{"ShaId": "adf56a4d", "Regions": [{"Name": "us-east-1a"}]}`
var single ShaInfo
if err := json.Unmarshal([]byte(content), &single); err != nil {
log.Fatal("解析单个对象失败:", err)
}
fmt.Printf("单对象解析结果: %+v\n", single)
// 输出: 单对象解析结果: {ShaId:adf56a4d Regions:[{Name:us-east-1a}]}掌握“JSON 形态 → Go 类型 → Unmarshal 目标”三者严格对应的原则,即可彻底避免 Unable to parse JSON array 类错误。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9