Golang如何解析嵌套JSON_Golang嵌套JSON解析教程【简明】

张开发
2026/4/17 6:49:17 15 分钟阅读

分享文章

Golang如何解析嵌套JSON_Golang嵌套JSON解析教程【简明】
应直接用 json.Unmarshal 解析到结构体避免先转 map[string]interface{}嵌套结构用结构体嵌套字段不匹配用 json tag缺失字段用指针或 sql.NullXXX动态 key 用 map[string]T多态数组优先服务端收敛结构。直接用 json.Unmarshal 解析到结构体别先转 map[string]interface{}嵌套 JSON 最容易掉进“先解析成 map[string]interface{} 再手动取值”的坑——写起来看似灵活实则类型不安全、易 panic、IDE 无法补全、后续维护成本高。Golang 的 json.Unmarshal 完全支持深度嵌套结构体映射只要字段名和 JSON key 对得上或加 json tag一层层嵌下去就行。常见错误现象panic: interface conversion: interface {} is map[string]interface {}, not string —— 这基本就是你把某一层当成 map 取了但实际该字段是字符串或数字或者没加 json: tag 导致字段没被填充取出来是零值。嵌套层级深没问题结构体里嵌结构体就行json.Unmarshal 递归处理字段名大小写不一致用 json:field_name tag 显式声明比如 CreatedAt int64 json:created_at某个嵌套字段可能缺失或为 null对应字段用指针类型如 *string、*User或 sql.NullXXX 类型避免解包失败遇到动态 key 名如 ID 作 key必须用 map[string]T当 JSON 是类似 {1001: {name: Alice}, 1002: {name: Bob}} 这种“ID 当 key”的结构没法硬编码结构体字段——这时候才该用 map[string]T且 T 仍建议是具体结构体不是 map[string]interface{}。使用场景API 返回以资源 ID 为键的批量数据、配置项按环境名分组等。立即学习“go语言免费学习笔记深入”定义 type UserMap map[string]User然后 json.Unmarshal(data, userMap)别写 map[string]map[string]interface{}否则下一层取值又要类型断言重复踩坑如果 key 不是字符串比如数字 IDJSON 标准只允许 string key服务端返回数字 key 实属非标前端/客户端大概率已转成字符串Go 侧按 string 处理即可json.RawMessage 用来延迟解析不确定结构的字段有些字段内容结构多变可能是对象、数组、字符串甚至空值或者你只想先校验外层字段内部留到业务逻辑里再按需解析——这时用 json.RawMessage 把原始字节存下来避免提前解包失败。 VWO 一个A/B测试工具

更多文章