本文介绍如何将形如 `[{"key1":"val1"},{"key2":"val2"}]` 的

在 Go 中处理 JSON 数据时,若原始数据是以多个独立对象组成的数组形式存在(例如 [{"Cat":"small animal"},{"Cow":"Big animal"}]),而非单个扁平对象(如 {"Cat":"small animal","Cow":"Big animal"}),则不能直接 json.Unmarshal 到 map[string]string——因为 JSON 格式不匹配:前者是 JSON 数组([]),后者是 JSON 对象({})。
正确的做法是分两步解析:
以下是完整可运行示例:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
// 原始 JSON 必须是数组格式:用方括号 [] 包裹多个对象
jsonText := []byte(`[
{"Cat": "small animal"},
{"Cow": "Big animal"},
{"Dog": "loyal pet"}
]`)
var rawList []map[string]string
if err := json.Unmarshal(jsonText, &rawList); err != nil {
log.Fatal("JSON 解析失败:", err)
}
// 合并为单个 map
resultMap := make(map[string]string)
for _, item := range rawList {
for key, value := range item {
resultMap[key] = value // 若存在重复 key,后出现的值会覆盖前者
}
}
fmt.Printf("合并后的字典: %+v\n", resultMap)
// 输出: 合并后的字典: map[Cat:small animal Cow:Big animal Dog:loyal pet]
}✅ 关键说明:
? 进阶建议:
通过该模式,你可灵活应对各类“分散式键值对集合”的 JSON 场景,兼顾简洁性与可扩展性。