JSON 转 Go 结构体
将 JSON 转换为 Go 结构体:导出的字段名、json 标签、为 null 使用指针类型,并可选 omitempty。支持嵌套对象和数组。免费。
嵌套对象生成独立的 struct;可空值使用 指针;整数映射为 int64,小数映射为 float64,混合或仅为 null 的值映射为 any。
完全在浏览器中运行,您的数据不会被上传。
相关工具
查看全部什么是 JSON 转 Go 结构体?
根据 JSON 示例生成符合 Go 惯用法的 struct 定义。字段名为导出的 PascalCase,并采用 Go 的缩写惯例(ID、URL、API……),每个字段都带有保留原始键名的 json:"…" 标签,嵌套对象会成为单独命名的结构体。
如何使用 JSON 转 Go 结构体
- 将 JSON 示例粘贴到 JSON 输入中(或点击加载示例/打开文件)。
- 设置根类型名称(默认为
Root)。 - 保留或取消勾选为可选和可空字段添加 omitempty。
- 复制生成的 Go 代码,或下载为文件。
示例
{"id":1,"name":"A","tags":["x"]} type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
} 何时使用 JSON 转 Go 结构体
适合用 encoding/json 反序列化 API 响应。它不会为时间值或枚举生成自定义类型;请在合适的地方自行把 string 改为 time.Time。
JSON 转 Go 结构体 的工作原理
程序会递归遍历示例,每个位置都会收集见到过的类型。对象数组会合并为一个类型:在部分元素中缺失的键变为可选,在某处为 null 的键变为可空,整数与小数混合会变为浮点类型,其他混合了多种类型的情况则回退为动态类型。嵌套对象成为各自命名的类型(键名的 PascalCase,数组键取单数:orders → Order),名称冲突时添加数字后缀。Go 输出中整数使用 int64,小数使用 float64,另有 string、bool,数组对应切片,可空值使用指针(*T),动态值或只有 null 的值使用 any。各列按 gofmt 的输出对齐。
常见用例
- 为 json.Unmarshal 建立 REST 响应模型
- 根据 JSON 文件创建配置结构体
- 加快 Go 微服务 DTO 的编写
- 对照 JSON 与 Go 代码中的字段命名
常见问题
为什么用 int64 而不是 int?
int64 在所有平台上大小都有保证,可避免大 ID 带来的溢出意外。如果你愿意,可以改为 int。
什么时候会使用指针?
当示例中某个键的值为 null 时,字段会变成 *T,这样就能把缺失的值与零值区分开。
omitempty 有什么作用?
序列化时,如果字段是零值,encoding/json 会跳过它。该选项只会给示例中可选或可空的字段添加它。