本文介绍如何使用 go 的 `encoding/json` 包解析形如 `[{"key1":"val1"},{"key2":"val2"}]` 的 json 数组,并将其扁平化合并为一个 `map[string]string`,适用于词典、配置项等场景。
在 Go 中处理 JSON 时,若原始数据是多个独立对象组成的数组(例如 [{"Cat":"small animal"},{"Cow":"Big animal"}]),而非单个对象或标准键值对映射,直接解码为 map[string]string 会失败——因为 JSON 数组无法直接映射到 Go 的 map 类型。正确做法是:先将 JSON 解码为 []map[string]string(字符串映射的切片),再遍历合并到目标 map 中。
以下是一个完整、可运行的示例:
package main
import (
"encoding/json"
"fmt"

"log"
)
func main() {
// 假设这是从 HTTP 响应、文件或 API 获取的 JSON 字节数组
jsonText := []byte(`[
{"Cat": "small animal"},
{"Cow": "Big animal"},
{"Dog": "loyal companion"}
]`)
var rawList []map[string]string
if err := json.Unmarshal(jsonText, &rawList); err != nil {
log.Fatal("JSON 解析失败:", err)
}
// 合并所有子 map 到一个统一的 map
wordMap := make(map[string]string)
for _, item := range rawList {
for key, value := range item {
wordMap[key] = value // 若存在重复 key,后出现的值将覆盖前者
}
}
fmt.Printf("合并后的词典: %+v\n", wordMap)
// 输出: 合并后的词典: map[Cat:small animal Cow:Big animal Dog:loyal companion]
}✅ 关键要点说明:
最终得到的 map[string]string 可直接用于快速查词、配置注入或进一步序列化,是 Go 中处理非标准 JSON 结构的典型实践。