JSON 转 Go Struct

粘贴 JSON 自动生成 Golang 结构体定义,支持 int64/float64 拆分、time.Time 时间识别、json tag 与嵌套内联/命名 struct

在线 JSON 转 Go Struct 工具:把一段 JSON 示例数据反推为可直接编译的 Go 结构体代码。自动完成字段命名(snake_case/camelCase/kebab-case → PascalCase,ID/URL/API/HTTP 等缩写保持大写)、 类型推断(整数 → int64、小数 → float64、时间形状字符串 → time.Time、null 与混合数组 → interface{})、嵌套对象展开(内联匿名 struct 或独立命名类型)与数组内对象字段并集合并, 输出按 gofmt 习惯做列对齐。全部解析与生成在浏览器本地完成,JSON 数据不上传,适合为 API 响应快速建模。

JSON 输入

生成设置

Go 代码预览(只读)

在左侧粘贴 JSON,Go 结构体会在这里实时生成

支持嵌套对象、数组、混合类型;全部解析在浏览器本地完成,数据不上传

类型推断口径

  • 数字:整数 → int64,带小数或指数 → float64(JSON 数字不区分整型宽度,统一按这两档承载)。
  • 时间识别:字符串形状命中 2024-01-15T10:30:00Z(ISO8601,可带毫秒与 Z / ±hh:mm 偏移)、2024-01-15 10:30:00、2024-01-15 之一 → time.Time;仅按形状识别,不校验真实日历。填写包名时自动补 import "time"(片段模式不输出 import)。
  • 数组:元素类型一致 → []T;int64/float64 混合 → []float64(数字家族归并);其余混合(如 string+number)与空数组 → []interface{}。
  • 数组内对象:全部对象元素按字段并集合并(保留首次出现顺序),仅生成一次类型;同字段基础类别冲突时回退 interface{},混入的 null / 标量元素忽略。
  • 命名:snake/camel/kebab key → PascalCase,ID/URL/API/HTTP 等缩写保持大写;非法字符当作分隔符过滤;同块内撞名自动加序号。

#JSON 转 Go Struct 是什么?

JSON 转 Go Struct 是一款在线 Golang 结构体生成工具。它把一段 JSON 示例数据反推为 Go 的 struct 类型定义:自动完成字段命名(snake_case/camelCase/kebab-case → PascalCase,ID/URL/API/HTTP 等缩写保持大写)、 类型推断(整数 → int64、小数 → float64、时间形状字符串 → time.Time、null 与混合数组 → interface{})、嵌套对象展开(内联匿名 struct 或独立命名类型)与数组内对象字段并集合并, 并按需生成 `json:"key"` 标签。输出按 gofmt 习惯做 tab 缩进与列对齐,可直接粘贴进项目编译。全部推断在浏览器本地完成,JSON 数据不离开你的设备。

#常见问题 (FAQ)

json tag 是什么?必须加吗?

tag 是写在结构体字段后面的元信息字符串。encoding/json 在 Unmarshal 时默认按「字段名大小写不敏感匹配」寻找 JSON key,加上 `json:"user_name"` 可以把 user_name 这样的下划线 key 精确映射到 UserName 字段,也能用 `json:"-"` 显式跳过字段。当 JSON key 与 Go 字段名完全一致时 tag 可以省略;但 key 含下划线、连字符或与字段名差异较大时,tag 基本是必须的。本工具默认开启并原样保留 key。

嵌套 struct 内联和命名怎么选?

内联匿名 struct 把子对象类型直接写在字段上,整段代码自包含、层次一目了然,适合一次性解析的 API 响应;缺点是同结构无法复用,嵌套深了可读性下降。独立命名类型(本工具按「父字段名 PascalCase + Struct」命名,如 profile → ProfileStruct)可跨函数复用、单独定义方法,适合长期维护的数据模型。拿不准时先用内联,结构稳定后再抽成命名类型。

时间字段为什么要 time.Time?

用 string 承接时间只是「能跑」,后续比较、格式化、算时间差都要再 parse 一遍;time.Time 让 encoding/json 与数据库驱动按 RFC3339 直接解析,空值判断、时区处理都有现成方法。本工具按形状识别:ISO8601(如 2024-01-15T10:30:00Z,可带毫秒与时区偏移)、2024-01-15 10:30:00、纯日期 2024-01-15 三种字符串会推断为 time.Time;识别只看形状不校验真实日历,误判时可随时关闭该开关。

数组里多个对象的字段不一致怎么办?

本工具采用「字段并集」策略:把数组内全部对象的字段按首次出现顺序合并成同一个 struct,只生成一次类型;同一字段在不同元素里基础类型冲突(比如一边是数字一边是字符串)时回退为 interface{};数组中混入的 null 或标量元素会被忽略。相比只看首元素的策略,并集能避免漏字段导致的静默丢数据。

什么时候会出现 interface{}?它的代价是什么?

值为 null 的字段、类型冲突的合并字段、空数组与无法归并的混合数组都会推断为 interface{}(即 any)。代价是丢失静态类型:读写时需要类型断言,类型拼错只能到运行时才发现,IDE 补全与重构也帮不上忙。生成后建议人工过一遍 interface{} 字段,换回具体类型或指针类型(如 *string 表达可空)。

生成的 Go 代码怎么用?

复制代码保存为 .go 文件(包名与项目保持一致),定义变量后用 json.Unmarshal 解析即可:var u Root; if err := json.Unmarshal(data, &u); err != nil { log.Fatal(err) },之后就能以 u.UserName 这样的类型安全方式访问字段;字段名、tag 或类型不合口味时直接在生成结果上修改即可。

相关工具推荐

Spine动画编辑器

专业的Spine动画预览和编辑工具,支持多引擎导出

热门 新品 本地

SQL查询优化器

分析SQL查询并提供优化建议

热门 新品 本地

JVM启动参数配置

可视化配置Java虚拟机启动参数,支持内存、GC、性能等选项

热门 新品 本地

代码片段转换

不同编程语言间代码片段转换(如Python↔JavaScript)

热门 新品 本地

IP地址查询

查询IP地址的地理位置、运营商、ASN等信息,支持IPv4和IPv6

热门 新品 本地

JSON转TypeScript接口

根据JSON数据自动生成TypeScript类型定义

热门 新品 本地

相关教程