Go语言中嵌套结构体JSON序列化失败的解决方案
发布时间 - 2025-12-26 00:00:00 点击率:次go的json.marshal函数只能序列化导出(首字母大写)的结构体字段,小写字段默认不可见,导致输出空对象{},需将字段名首字母大写或自定义marshaljson方法。
在Go语言中,encoding/json包对结构体进行JSON序列化时遵循严格的可见性规则:只有首字母大写的导出字段(exported fields)才能被外部包(如json)访问并序列化;而小写字母开头的字段属于未导出(unexported)成员,在json.Marshal调用时会被忽略,最终生成空JSON对象(如{})。
以原代码为例,Configitem和GuiConfig的所有字段均为小写(如local_address、configs),因此json.Marshal(config1)返回{}——并非程序崩溃,而是“静默跳过”所有字段。
✅ 正确做法是将结构体字段改为导出形式(首字母大写),并可配合json标签明确字段名,提升可读性与兼容性:
type Configitem struct {
LocalAddress string `json:"local_address"`
LocalPort int `json:"local_port"`
Method string `json:"method"`
Password string `json:"password"`
Server string `json:"server"`
ServerPort string `json:"server_port"`
Timeout int `json:"timeout"`
}
type GuiConfig struct {
Configs []*Configitem `json:"configs"`
Index int `json:"index"`
}修改后,json.Marshal(config1)将正确输出:
{"configs":[{"local_address":"eouoeu","local_port":111,"method":"eoeoue","password":"ouoeu","server":"oeuoeu","server_port":"qoeueo","timeout":3333}],"index":1}⚠️ 注意事项:
- 即使添加了json标签,字段仍必须导出(大写首字母),否则标签无效;
- 若因封装需求必须保留字段私有(如避免外部直接修改),可为结构体实现json.Marshaler接口,自定义序列化逻辑;
- 建议始终为导出字段添加json标签,显式控制JSON键名,避免结构体字段名变更影响A
PI兼容性。
总结:Go的JSON序列化不是“反射所有字段”,而是“仅反射导出字段”。牢记 “小写=私有=JSON不可见” 这一原则,是避免此类问题的关键。
# word
# js
# git
# json
# go
# go语言
# igs
# 封装
# 结构体
# 接口
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何做网站制作流程,*游戏网站怎么搭建?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
如何登录建站主机?访问步骤全解析
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
动图在线制作网站有哪些,滑动动图图集怎么做?
canvas 画布在主流浏览器中的尺寸限制详细介绍
Laravel如何自定义分页视图?(Pagination示例)
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
深圳网站制作培训,深圳哪些招聘网站比较好?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Android仿QQ列表左滑删除操作
香港服务器部署网站为何提示未备案?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
网站页面设计需要考虑到这些问题
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
PHP正则匹配日期和时间(时间戳转换)的实例代码
微信小程序 五星评分(包括半颗星评分)实例代码
三星、SK海力士获美批准:可向中国出口芯片制造设备
如何构建满足综合性能需求的优质建站方案?
如何基于PHP生成高效IDC网络公司建站源码?
如何自定义建站之星模板颜色并下载新样式?
如何用VPS主机快速搭建个人网站?
如何利用DOS批处理实现定时关机操作详解
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何续费美橙建站之星域名及服务?
Laravel如何使用Blade组件和插槽?(Component代码示例)
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
如何在建站之星网店版论坛获取技术支持?
如何用PHP快速搭建高效网站?分步指南
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何在IIS中配置站点IP、端口及主机头?
在线教育网站制作平台,山西立德教育官网?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
韩国服务器如何优化跨境访问实现高效连接?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
高端网站建设与定制开发一站式解决方案 中企动力
QQ浏览器网页版登录入口 个人中心在线进入


PI兼容性。