Skip to content
代码工具2026-08-283 分钟阅读

对接第三方 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 不上传:

  1. 打开 JSON 转 Go
  2. 粘贴你的 JSON(可以是对象或数组)。
  3. 配置选项:
    • 是否生成 json tag(默认开);
    • 字段命名风格(camelCase / PascalCase);
    • 根类型名(如 ResponseUser)。
  4. 点击转换,得到完整 struct 代码,可直接复制到项目。
  5. 如果还要转成其他语言,可再用 JSON 转 TypeScriptJSON 转 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 并确认 json tag 与格式一致。
  • 大写导出: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 不上传,更适合处理含敏感字段的接口数据。


广告