这个工具是什么
JSON → Go Struct 为 Go 1.18+ 生成命名结构体和切片类型。字段名会转换为可导出的合法标识符,json tag 尽可能保存原始键;复杂或特殊键仍需核对 encoding/json 的约束。
如何使用
- 输入 JSON,使用多个对象样本可帮助发现缺失字段。
- 设置根结构体名称。
- 点击“转换”,检查导出字段、json tag、可空指针和切片类型。
- 复制代码或下载 Go 源码,整合到目标包后按项目要求调整。
使用示例
- {"first_name":"Tom"}:生成导出字段 FirstName,并保留 json:"first_name"。
- [{"id":1,"name":"Tom"},{"id":2}]:name 是可选字段,可使用 *string 与 omitempty。
- {"matrix":[[1,2],[3,4]]}:推断为 [][]int64。
类型映射规则
字符串为 string,安全整数为 int64,小数及混合数字为 float64,布尔值为 bool,数组为 []T。已知类型可空或可缺失时使用适当指针,缺失字段附带 omitempty;未知、仅 null 或无法统一的混合元素使用 any。Go 目标为 1.18+。字段必须导出,结构体名称稳定且避免冲突,tag 以合法 Go 字符串转义。encoding/json 对逗号、减号或部分控制字符键有特殊含义,无法直接往返的键会在代码中说明,不能把语法合法等同于任意 JSON key 都能自动映射。 输入和输出各最多 1 MiB、嵌套最多 64 层、100000 个节点、5000 个合并字段、256 个类型。不安全整数、非有限数字或下溢为零的数值会报错;其他小数基于浏览器浮点精度。
常见用途
- 为服务接口样本准备 Go 数据类型。
- 检查 nullable/optional 字段的指针需求。
- 为嵌套 JSON 生成具名结构体与切片。
隐私说明
所有 JSON 推断与 Go 代码生成均在浏览器本地进行,不发送到服务器或在线生成服务。
如需保留结果,请在离开页面前复制或下载到本地。
FAQ
为什么字段名首字母大写?
Go 的 encoding/json 通常需要导出字段;首字母大写使字段可由包外与标准库访问。
json tag 有什么作用?
它指定结构体字段与 JSON 键的对应关系,避免改名后丢失常见原始键。
null 怎么处理?
已知类型与 null 同时出现时可使用指针;只有 null 而缺乏信息时采用 any 等保守类型。
为什么使用 any?
本页目标为 Go 1.18+,any 是 interface{} 的别名,适合确实无法从样本确定的类型。
任意 JSON key 都能直接变成有效 tag 吗?
不一定。Go 的 tag 字符串语法可以转义,但 encoding/json 还会解释逗号与减号等特殊内容;这类键需自定义映射并核对生成说明。