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

Golang如何反序列化包含异构嵌套社交对象的JSON文件

反序列化问题解答

现有结构体的兼容性结论

你当前定义的结构体可以正常完成反序列化,不会因为Social结构体同时声明两个字段导致失败。
Go标准库encoding/json的反序列化逻辑会自动匹配JSON中存在的字段,给对应结构体字段赋值,JSON中不存在的结构体字段会保持对应类型的零值:

  • 反序列化Bob的数据时,Social结构体的Facebook字段赋值为Bob_the_builder,Twitter字段保持空字符串
  • 反序列化Alice的数据时,Social结构体的Twitter字段赋值为Alice_the_builder,Facebook字段保持空字符串

注意你当前写的结构体代码有两处语法错误需要修正:

  1. Go的字符串类型是小写string,不是大写String
  2. 结构体JSON标签需要用反引号`包裹,不能用单引号'

修正后的基础版本代码如下:

type User struct {
   Name string `json:"name"`
   Age int `json:"age"`
   Occupation string `json:"occupation"`
   Social Social `json:"social"`
}

type Social struct {
  Facebook string `json:"facebook"`
  Twitter string `json:"twitter"`
}

更灵活的实现方案

如果后续可能新增更多社交平台类型,不想每次加平台都修改Social结构体,可以直接用map[string]string类型承载Social字段,适配任意平台的键值对:

type User struct {
   Name string `json:"name"`
   Age int `json:"age"`
   Occupation string `json:"occupation"`
   Social map[string]string `json:"social"`
}

使用时可以直接通过user.Social["facebook"]、user.Social["twitter"]读取对应账号,也可以遍历map获取用户绑定的平台类型和账号。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:03