You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go JSON Decoder解码嵌套结构体时字段取值异常问题

问题原因说明
  • 你观察到的「嵌套对象被扁平化」是打印输出的视觉错觉,结构体实际的嵌套结构没有任何问题:
    Go标准库encoding/json解码时,如果JSON对应字段值为null,目标字段是值类型(比如你这里用的string)时,会自动赋值为该类型的零值,string的零值是空字符串。
    而log.Println打印结构体时,同层级字段默认用空格分隔,空字符串的DisplayName和后面的Id字段连在一起输出,就会出现你看到的{{ a03dfee5-a754-4eb9 }}效果,看起来像是少了一层结构。
  • 你可以通过下面的代码验证结构完整:
// 单独打印嵌套字段确认取值
log.Println("DisplayName取值:", middleMan.User.DisplayName) // 输出空字符串
log.Println("Id取值:", middleMan.User.Id) // 输出正确的id值
log.Println("User结构体完整类型:", fmt.Sprintf("%T", middleMan.User)) // 输出CompletedByUser类型,确认嵌套结构存在
  • 如果需要明确区分「前端未传该字段」、「前端传了null」、「前端传了空字符串」三种场景,可以把DisplayName字段修改为指针类型:
type CompletedByUser struct {
    DisplayName *string `json:"displayName"`
    Id          string  `json:"id"`
}

修改后JSON传入null时,DisplayName会被赋值为nil,而非空字符串,你就可以做针对性的业务判断。

内容的提问来源于stack exchange,提问作者TheForgot3n1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:15:08