将 JSON 数据转换为 Go 语言结构体定义
本工具把 JSON 样例转换成 Go 的 struct 定义,便于对接 API。左侧粘贴 JSON,右侧得到 Go 代码。可设置根结构体名称(默认 AutoGenerated),勾选「添加 omitempty 标签」与「内联类型定义」。提供「转换」「复制代码」「清空」以及示例按钮。字段名会经 toGoName 转成 PascalCase 导出字段,并生成 json:"原键名" 标签。
null → interface{}string;布尔 → boolint64,非整数 → float64[]interface{};否则取首元素推断 []Tstruct { ... }json:"key,omitempty"encoding/json 反序列化实测,必要时手动改 json.Number 或指针字段。先保证输入是合法 JSON:键必须双引号、不能有注释与尾逗号。
当 Number.isInteger 为 false 时用 float64。若业务需要定点小数,请手改类型。
结构浅、只想要一个文件内匿名结构时开启;深嵌套通常关闭以生成多个命名 struct。
转换在浏览器本地执行,适合处理未公开接口样例。
user_id 会变成导出字段 UserId 一类 PascalCase,json tag 仍保留原键名。
若数组元素是对象,会按首元素对象生成结构,并得到切片类型用法;空数组则类型信息有限。
左侧 #input 放 JSON,右侧 #output 出 Go。根名在 #structName(默认思路为 AutoGenerated 一类可编辑名)。勾选 #omitempty 会在 json 标签追加 ,omitempty;勾选 #inlineType 时嵌套对象倾向写成匿名 struct { ... } 内联。主流程:convert() → 解析 JSON → jsonToGo / generateStruct → getGoType 推断类型 → toGoName 把键转成导出字段。按钮:#btnPaste 粘贴、#btnConvert 转换、#btnCopy 复制输出、#btnClear 清空。状态文案走 #status 与 showStatus。主题切换 toggleTheme 只影响外观,不改类型规则。
null 变 interface{};字符串 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 草稿。