对接第三方 API,返回一大段 JSON。你不想手写几十个字段的 Go struct——既慢又容易拼错 tag。能不能自动转?
能。下面讲清楚 JSON → Go struct 的类型映射规则,以及怎么一键生成带 json tag 的代码。
JSON 类型到 Go 类型的映射
| JSON 类型 | Go 类型 | 备注 |
|---|---|---|
| 对象 {} | struct {…} | 嵌套结构体 |
| 数组 [] | 切片 []T | 元素类型取数组内容推断 |
| 字符串 "a" | string | |
| 数字(无小数) | int64 / float64 | 取决于是否有小数点 |
| 数字(有小数) | float64 | |
| 布尔 true/false | bool | |
| null | 指针或 interface{} | 建议用指针 *T 区分「零值」与「未设置」 |
| 混合类型数组 | []interface{} | 尽量避免 |
关键坑:数字与 null
Go 没有「可空的基础类型」。如果字段可能是 null,直接写成 int 反序列化会报错,应写成指针:
type User struct {
Name string `json:"name"`
Age *int `json:"age"` // 可能为 null
Score *float64 `json:"score"`
}
一步步生成(无需装任何插件)
用本站 JSON 转 Go 工具,在浏览器本地完成,JSON 不上传:
- 打开 JSON 转 Go。
- 粘贴你的 JSON(可以是对象或数组)。
- 配置选项:
- 是否生成
jsontag(默认开); - 字段命名风格(camelCase / PascalCase);
- 根类型名(如
Response、User)。
- 是否生成
- 点击转换,得到完整
struct代码,可直接复制到项目。 - 如果还要转成其他语言,可再用 JSON 转 TypeScript 或 JSON 转 Java。
一个完整例子
输入 JSON:
{
"id": 1024,
"name": "Alice",
"isActive": true,
"tags": ["go", "api"],
"profile": {
"age": 30,
"city": "Shanghai"
}
}
工具生成的 Go 代码:
type Profile struct {
Age int `json:"age"`
City string `json:"city"`
}
type Response struct {
ID int `json:"id"`
Name string `json:"name"`
IsActive bool `json:"isActive"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
进阶建议
- 先格式化再转换:杂乱的 JSON 先用 JSON 格式化工具 整理,类型推断更准。
- 区分零值与缺失:对外接口字段多用指针,避免把「未返回」误判为「0 / 空串」。
- 时间字段:JSON 里的时间通常是 RFC3339 字符串,Go 里用
time.Time并确认jsontag 与格式一致。 - 大写导出:Go 字段必须大写才能被
encoding/json序列化,转换工具默认已处理,手写时别漏。
常见问题
Q:数组里元素类型不一致怎么办?
转成 []interface{},你自己再断言。最好让接口返回统一结构。
Q:数字有时是整数有时是小数?
统一用 float64 最稳妥;若确定是整数,手动改成 int64。
Q:嵌套太深,生成的 struct 太多?
可以考虑用 map[string]interface{} 临时接收,再按需定义结构体,或分层转换。
Q:要生成带 omitempty 的 tag 吗?
视场景。写请求体时 omitempty 能省掉零值字段;读响应体时通常不需要,避免把「缺失」当成「零值」。
小结
JSON 转 Go struct = 按类型映射规则生成带 json tag 的结构体,注意 null 用指针、数字类型要选对。用本站的 JSON 转 Go 工具 在本地一键生成,JSON 不上传,更适合处理含敏感字段的接口数据。
相关工具
相关文章
如何把 JSON 快速转成 Java 实体类(含注解与 List 嵌套)
拿到一份 JSON 接口数据,想生成对应的 Java 实体类?本文讲解 JSON 转 Java 的类型映射与常用注解,并一步步用本地转换工具生成可序列化的实体类。
HTML 转 JSX 完全指南:React 开发者必备技巧
深入理解 HTML 与 JSX 的差异,掌握 className、style 对象、驼峰属性等转换要点,快速将 HTML 片段迁移到 React 项目。
正则表达式匹配不上?排查这 6 个常见坑
正则表达式不匹配、regex匹配失败时如何排查?本文详解贪婪量词、标志位遗漏、特殊字符转义、环视断言、换行符处理、Unicode属性6大常见坑,附前后对比示例,帮你快速定位正则调试问题。