0

0

如何在 Go 中解析包含多个键值对对象的 JSON 数组并合并为单一映射

心靈之曲

心靈之曲

发布时间:2026-01-16 10:29:13

|

900人浏览过

|

来源于php中文网

原创

如何在 Go 中解析包含多个键值对对象的 JSON 数组并合并为单一映射

本文介绍如何使用 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]
}

关键要点说明:

标贝AI虚拟主播
标贝AI虚拟主播

一站式虚拟主播视频生产和编辑平台

下载
  • []map[string]string 是解析此类“对象数组”的标准中间类型,每个数组元素是一个独立的键值对映射;
  • 合并逻辑需手动遍历,Go 不提供自动扁平化;
  • 若原始 JSON 实际为 {...}(即外层是对象而非数组),则需先确认结构——常见错误是误将数组格式的 JSON 当作单个对象解析,导致 json: cannot unmarshal object into Go value of type []map[string]string 错误;
  • 如需健壮性,建议添加字段校验(例如确保每个子对象仅含一个键值对)或错误恢复逻辑;
  • 若数据量极大,可考虑流式解析(如 json.Decoder 配合 Token())以降低内存占用,但对常规词典规模,上述方式简洁高效。

最终得到的 map[string]string 可直接用于快速查词、配置注入或进一步序列化,是 Go 中处理非标准 JSON 结构的典型实践。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6087

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

804

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1061

2023.12.21

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

3

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号