跳到主要内容
AZ Tools

JSON 转 Go 结构体转换器

粘贴一段 JSON 样本,立即得到对应的 Go 类型定义——转换随输入实时进行,完全在浏览器中完成。对象键会转换为导出的 PascalCase 字段名,以便 encoding/json 能对其进行序列化;每个字段都带有保存原始键名的 json:"…" 标签,经标准库来回转换后能原样还原你最初的 JSON。整数映射为 int64,小数映射为 float64,嵌套对象会生成与数据结构一一对应的内联匿名结构体。 由于类型是从单个样本推断的,请把输出当作高质量的初稿来对待:样本里恰好是 42 的字段会被推断成 int64,即使该 API 也可能返回 41.5;null 和空数组因为看不出元素类型而输出为 interface{};切片的类型只取决于第一个元素。请检查结果,把你更了解的字段类型收紧,并为可选字段手动加上 ,omitempty 或指针类型。你的输入不会离开设备,并保存在 localStorage 中,刷新页面后依然保留。

Go 结构体

使用方法

  1. 在输入框中粘贴或输入一段 JSON 样本——转换是实时的,没有按钮需要点。
  2. 如有需要,为根结构体命名(默认 AutoGenerated);名称会被规范为导出的 PascalCase 标识符。
  3. 用复制按钮复制生成的定义,粘贴到你的 Go 文件里。
  4. 检查推断出的类型:可能出现小数的数字改宽,替换 interface{} 占位符,为可选字段加上 ,omitempty。

常见问题

数字会被推断为什么类型?
整数转换为 int64,带小数部分的数字转换为 float64。这只是基于单个样本的推断——如果某字段可能出现小数,请自行改为 float64;需要精确的十进制处理时可考虑 json.Number。
null 或空数组如何处理?
null 映射为 interface{},空数组映射为 []interface{},因为样本中没有任何类型信息。弄清真实类型后请手动替换——可能为 null 的字段在 Go 中通常更适合用指针表示。
字段名和 json 标签是怎么确定的?
键名按非字母数字字符拆分后以 PascalCase 拼接成导出标识符(user_id 变成 UserId),因为 encoding/json 只能访问导出字段。原始键名会原封不动保留在 json 标签里,序列化时能精确还原你的键名。
嵌套对象会生成单独的具名类型吗?
不会——它们以内联匿名结构体输出,让结果保持为一条可随处粘贴的自包含声明。如果同一结构在多处重复,请手动提取为具名类型。另外,数组元素类型只根据第一个元素推断,混合类型的数组不会被识别出来。
我的 JSON 会被发送或存储到某处吗?
它不会离开浏览器——解析和生成都是纯客户端 JavaScript。为方便起见,输入内容和根名称会保存在浏览器的 localStorage 中,刷新后仍在;在共用设备上粘贴过敏感内容后,记得清空输入。

相关工具