如何正确解析包含多个 JSON 对象的 JSON 数组

发布时间 - 2026-02-03 00:00:00    点击率:

本文详解如何在 go 中准确解析嵌套在顶层字段中的 json 对象数组,包括结构体字段名与 json 键的精确映射、类型匹配(如 `int64` vs `string`)、以及安全遍历解析后数据的完整实践。

在 Go 中解析 JSON 数组时,常见错误往往源于结构体字段标签(struct tags)与实际 JSON 键名不一致,或数据类型声明不匹配(例如将数字型 ID 声明为 string)。以你提供的示例为例,原始 JSON 的顶层字段是 "array",而非 "createUserArray";且每个对象中键名为 "entity_title",但结构体却误写为 "entity_title_name" —— 这会导致解码失败或字段为空。

首先,修正结构体定义,确保 json 标签严格对应 JSON 字段名,并选用合适的数据类型:

type MsgCreateUserArray struct {
    CreateUser []MsgCreateUserJson `json:"array"` // ✅ 匹配 JSON 中的 "array" 字段
}

type MsgCreateUserJson struct {
    EntityTitle       string  `json:"entity_title"`        // ✅ 原始键名,非 entity_title_name
    EntityOrgName     string  `json:"entity_org_name"`
    PossibleUserName  string  `json:"possible_user_name"`
    PosibbleUserEmail string  `json:"posibble_user_email"`   // ⚠️ 注意:JSON 中拼写为 "posibble"(疑似 typo,需按实际保留)
    UserPositionTitle string  `json:"user_position_title"`
    MsgBodyID         int64   `json:"msg_body_id,omitempty"` // ✅ msg_body_id 是整数,用 int64 更安全(避免溢出)
}
? 关键修正点说明:json:"array" → 正确绑定顶层数组字段;字段名 EntityTitle 对应 "entity_title",而非 "entity_title_name";MsgBodyID 使用 int64 并添加 omitempty(因 JSON 中该值无小数,且 omitempty 在零值时可忽略序列化,不影响解析);拼写差异(如 "posibble_user_email")必须如实反映在 tag 中——Go 解析器严格区分大小写与拼写。

接下来,在 HTTP 处理函数中完成解析与遍历:

func parseJson(rw http.ResponseWr

iter, request *http.Request) { defer request.Body.Close() // ✅ 防止资源泄漏 decoder := json.NewDecoder(request.Body) var payload MsgCreateUserArray if err := decoder.Decode(&payload); err != nil { http.Error(rw, "Invalid JSON: "+err.Error(), http.StatusBadRequest) return } // ✅ 安全遍历解析后的对象切片 for i, user := range payload.CreateUser { log.Printf("Item %d: %s @ %s, position: %s, ID: %d", i+1, user.PossibleUserName, user.EntityTitle, user.UserPositionTitle, user.MsgBodyID, ) // 此处可对每个 user 执行业务逻辑:存入 DB、校验邮箱、触发通知等 } rw.WriteHeader(http.StatusOK) rw.Write([]byte("OK")) }

? 注意事项与最佳实践

  • 始终调用 request.Body.Close()(建议用 defer),避免连接复用时的潜在问题;
  • 使用 http.Error() 返回清晰的客户端错误,而非 panic —— 生产环境应避免 panic 中断服务;
  • 若 msg_body_id 可能缺失,omitempty 仅影响序列化;解析时若字段不存在,int64 将默认为 0,必要时可改用 *int64 表示可空;
  • HTML 转义邮箱(如 [email protected])属于前端防护(Cloudflare Email Protection),后端解析得到的是完整 HTML 字符串;如需提取纯邮箱,应使用 html.UnescapeString() 或正则清洗,切勿直接渲染到页面以防 XSS

通过以上结构体修正 + 类型对齐 + 安全遍历,你即可稳健地从 HTTP 请求中提取并处理任意长度的 JSON 对象数组。


# html  # js  # 前端  # json  # go  # usb  # 后端  # ai  # 邮箱  # golang  # xss  # 数据类型  # String  # Array  # Error  # 字符串  # 结构体  # protected  # Struct  # 对象  # href  # http  # 遍历  # 而非  # 字段名  # 键名  # 的是  # 序列化  # 不存在  # 为例  # 如需  # 这会 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: 用v-html解决Vue.js渲染中html标签不被解析的问题  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何利用DOS批处理实现定时关机操作详解  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Android仿QQ列表左滑删除操作  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  详解Huffman编码算法之Java实现  bing浏览器学术搜索入口_bing学术文献检索地址  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  php 三元运算符实例详细介绍  开心动漫网站制作软件下载,十分开心动画为何停播?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  EditPlus 正则表达式 实战(3)  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  如何确保FTP站点访问权限与数据传输安全?  如何在IIS服务器上快速部署高效网站?  node.js报错:Cannot find module 'ejs'的解决办法  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何在阿里云虚拟主机上快速搭建个人网站?  如何选择PHP开源工具快速搭建网站?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  ,怎么在广州志愿者网站注册?  如何在Windows服务器上快速搭建网站?  如何挑选最适合建站的高性能VPS主机?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  js实现点击每个li节点,都弹出其文本值及修改  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何发送系统通知?(Notification渠道示例)  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  网站制作价目表怎么做,珍爱网婚介费用多少?  如何在新浪SAE免费搭建个人博客?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  详解Android——蓝牙技术 带你实现终端间数据传输  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何挑选优质建站一级代理提升网站排名?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?