JSON 转 Go 结构体 · 免费在线生成 Go struct
免费在线 JSON 转 Go 结构体工具,粘贴 JSON 一键生成 Go struct。Go 的特殊之处在于字段必须首字母大写才能被 encoding/json 导出,所以字段名统一转成帕斯卡命名,并逐个附上 struct tag 记录原始 JSON 键名——少了 tag 就对不上小写键的接口返回。嵌套对象生成同级 struct。纯浏览器本地生成,不上传、免登录。
- 粘贴接口返回的 JSON(本页已自动预选 Go)。
- 填写根 struct 名,默认 Root。
- 复制生成的 Go struct 到 .go 文件。
- 按需把字段改成指针类型或补 omitempty。
为什么每个字段都要 struct tag?
因为 Go 只导出首字母大写的字段,而 JSON 键通常是小写或下划线风格。字段写成 UserName 后,encoding/json 默认去找 "UserName" 键,匹配不上 "user_name"。生成结果给每个字段都带上 `json:"user_name"` 这样的 tag,反序列化才能对上。
类型是怎么映射的?
字符串到 string,布尔到 bool,整数按大小到 int 或 int64(超过 int32 范围用 int64),小数到 float64,数组到切片(如 []string),对象到对应 struct 类型。注意 JSON 数字本质是浮点,接收超大整数 ID 时建议确认精度,必要时改成 string。
null 字段生成了 interface{},怎么改?
null 无法推断类型,只能落到 interface{}。已知实际类型时改成对应类型,需要区分「零值」和「字段缺失」时改成指针(如 *string),这样未赋值就是 nil。指针配合 omitempty 也能让序列化时跳过空字段。
需要 omitempty 吗?
生成结果不加 omitempty,因为它只影响序列化输出:加上后零值字段(空字符串、0、nil)不会出现在 JSON 里。做请求体、字段可选时建议加;做响应体、下游依赖字段存在时不要加,否则对方会拿不到字段。
嵌套 struct 是内嵌还是独立定义?
生成的是独立的同级 struct,根 struct 里以字段类型引用(如 Address Address)。Go 允许一个文件里放多个类型,直接整段复制即可编译,无需拆文件。想改成匿名内嵌结构体也可以,但独立定义更便于复用。