编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 格式化 / JSON转Go结构体

JSON转Go结构体

粘贴JSON,一键生成Go结构体

输入 JSON
结果

这个工具能做什么

这个工具把一段 JSON 数据转换成对应的 Go 语言 struct 定义。你把接口返回的 JSON 样例粘贴进去,点击生成,就能得到字段名为 PascalCase、每个字段都带 json 标签(标签内容是原始键名)的结构体代码。对接第三方 API 或后端接口时,手写这类承接结构很常见,字段一多就容易漏标签、类型写错、大小写不符合 Go 的导出规则;这个工具把这段机械劳动自动化,直接给出可以粘进项目里的结构体骨架。

工具的核心是对 JSON 做递归解析,再根据每个值的实际类型推断对应的 Go 类型。整数映射为 int64、小数为 float64、字符串为 string、布尔为 bool、null 因为无法确定类型而落到 interface{};遇到对象就生成嵌套的 struct,遇到数组则取元素类型生成切片。字段名会从 JSON 键名转成 PascalCase 以满足 Go 只导出首字母大写字段的规则,同时把原始键名保留在 json 标签里,保证 Unmarshal 和 Marshal 时字段能和 JSON 键一一对应。

最典型的用法是对接 HTTP 接口时,把一份真实的响应样例贴进来快速得到承接类型。比如你从某个 REST API 拿到一段含 user 对象和 orders 数组的返回,生成后就有了带嵌套 struct 和切片的骨架,再配合 encoding/json 的 Unmarshal 就能把响应解析进内存。又比如处理配置文件或消息队列里的 JSON,先用样例生成结构体,再按业务微调字段类型和标签,能省去对着文档从零敲结构体的时间。

使用时要留意几个边界情况。数值类型是按样例值推断的,JSON 本身不区分整数和浮点,如果某字段样例恰好是整数但业务上可能出现小数,生成的 int64 就得手动改成 float64;值为 null 的字段会退化成 interface{},通常要按真实语义换成具体类型或指针。空数组因为没有元素可参考,推断不出具体的元素类型。另外生成的标签是最基础的 json 键名映射,不含 omitempty、string 等选项,时间字段也只会是 string 或数字而不是 time.Time,这些都需要生成后按需补充。

JSON转Go结构体是一个免费的在线工具,打开网页就能用,不用下载也不用注册。平时大家搜的“json转go”、“json转struct”、“json转结构体”,说的都是这个。

常见使用场景

使用方法

  1. 把内容粘贴到输入框(生成类工具直接设置选项)。
  2. 按需要选择选项,点操作按钮。
  3. 结果出现在下方,点「复制结果」即可带走。

常见问题

生成的整数字段为什么是 int64 而不是 int?
工具把整数统一推断为 int64,这样在 32 位和 64 位平台上取值范围一致,也能容纳较大的 ID 值。如果你确定字段值不大,可以手动改成 int。
字段值为 null 时会生成什么类型?
null 无法判断具体类型,会生成 interface{}。建议根据字段真实语义替换成确定的类型,比如可能为空的字符串用 *string 指针来表达可空。
JSON 里的时间或日期字段会生成 time.Time 吗?
不会。JSON 中的时间通常是字符串或时间戳数字,工具只按字面推断成 string 或 int64/float64,需要 time.Time 时要自己替换类型并处理解析逻辑。
和直接用 map[string]interface{} 解析有什么区别?
用 map 解析灵活但取字段要做类型断言、容易出错。生成具名 struct 后字段类型明确、有 IDE 补全,配合 encoding/json 直接 Unmarshal 更安全也更易读。
粘贴的 JSON 会上传到服务器吗?含敏感字段安全吗?
不会,解析和代码生成都在浏览器本地用 JavaScript 完成,JSON 不会发送到任何服务器,可以放心粘贴含敏感字段的接口样例。

相关工具

查看全部「格式化」工具 →

相关名词解释