JSON 转 Go Struct

将 JSON 数据转换为 Go 语言结构体定义

JSON 转 Go 结构体完整指南

本工具把 JSON 样例转换成 Go 的 struct 定义,便于对接 API。左侧粘贴 JSON,右侧得到 Go 代码。可设置根结构体名称(默认 AutoGenerated),勾选「添加 omitempty 标签」与「内联类型定义」。提供「转换」「复制代码」「清空」以及示例按钮。字段名会经 toGoName 转成 PascalCase 导出字段,并生成 json:"原键名" 标签。

类型推断规则(与脚本一致)

操作步骤

  1. 粘贴真实接口响应或点示例填充。
  2. 填写根结构体名(需是合法 Go 标识意图,工具会尽量清洗)。
  3. 按需要勾选 omitempty / 内联类型,点「转换」。
  4. 检查字段类型与嵌套结构,点「复制代码」放入项目。
  5. encoding/json 反序列化实测,必要时手动改 json.Number 或指针字段。

适用场景

边界与限制

常见问题

转换失败提示 JSON 错误?

先保证输入是合法 JSON:键必须双引号、不能有注释与尾逗号。

为什么数字变成 float64?

Number.isInteger 为 false 时用 float64。若业务需要定点小数,请手改类型。

内联类型适合什么时候开?

结构浅、只想要一个文件内匿名结构时开启;深嵌套通常关闭以生成多个命名 struct。

会上传我的 JSON 吗?

转换在浏览器本地执行,适合处理未公开接口样例。

字段名里的下划线怎么处理?

user_id 会变成导出字段 UserId 一类 PascalCase,json tag 仍保留原键名。

根是数组怎么办?

若数组元素是对象,会按首元素对象生成结构,并得到切片类型用法;空数组则类型信息有限。

转换管线与按钮对照

左侧 #input 放 JSON,右侧 #output 出 Go。根名在 #structName(默认思路为 AutoGenerated 一类可编辑名)。勾选 #omitempty 会在 json 标签追加 ,omitempty;勾选 #inlineType 时嵌套对象倾向写成匿名 struct { ... } 内联。主流程:convert() → 解析 JSON → jsonToGo / generateStructgetGoType 推断类型 → toGoName 把键转成导出字段。按钮:#btnPaste 粘贴、#btnConvert 转换、#btnCopy 复制输出、#btnClear 清空。状态文案走 #statusshowStatus。主题切换 toggleTheme 只影响外观,不改类型规则。

类型细节与改稿清单

nullinterface{};字符串 string;布尔 bool;整数 int64、非整数 float64;空数组 []interface{},非空按首元素推 []T。粘贴真实响应后请人工核对:金额是否该用定点类型、ID 是否该用 string 防精度丢失、可空字段是否该改指针、时间字符串是否该换成 time.Time 自定义 Unmarshal。异构数组与「有时对象有时 null」的字段,自动推断常不够稳,生成后应用 encoding/json 跑一遍单测再合入仓库。

失败排查与隐私

转换失败多半是非法 JSON:单引号、注释、尾逗号、Python True/False 都不会过 JSON.parse。大整数超过 JS 安全整数会在浏览器侧失真,超大 ID 建议先当字符串样例再手改类型。全流程在本地完成,适合未公开接口样例;公共电脑用完点清空,避免下一位看到业务 JSON。本工具不生成校验 tag、构造函数或完整 main,只交付 struct 草稿。