JSON 转 Go 是把 JSON 格式的数据自动转换为 Go 语言 struct 类型定义的过程。JSON 是 REST API、配置文件、消息队列和日志中最常见的数据交换格式,而 Go 是一门强类型语言,开发中经常需要把 JSON 的动态结构映射为 struct 才能用 encoding/json 进行反序列化。手写 struct 尤其是嵌套对象时容易漏字段或写错类型,这个工具就是要把重复劳动自动化。
Go 的 struct 是复合数据类型,用 `type Name struct { ... }` 声明。每个字段由名称和类型组成,字段名必须大写开头才能被其他包访问,也就是所谓「可导出标识符」。工具会自动把 JSON 的字段名转为 PascalCase 的导出字段名,例如 `user_name` 会映射为 `UserName`,并保留原始 key 在 json 标签中。
本工具的核心转换由浏览器内的 jsonFormat Web Worker 完成,调用 quicktype-core 的 Go 渲染器并传入 `just-types` 与 `no-comments` 选项。整个流程不依赖后端服务:输入的 JSON 在本地解析、推断类型、生成 Go 代码,最后呈现到右侧编辑器中。
类型推断遵循 JSON 到 Go 的常规映射:字符串映射为 `string`、布尔映射为 `bool`、整数映射为 `int64`、浮点数映射为 `float64`、数组映射为切片 `[]T`、对象映射为独立的 struct、`null` 映射为 `interface{}`。嵌套对象会递归处理,保持层级关系清晰。
与手动编写相比,工具生成的代码是一份「可运行的初稿」。开发者通常只需要微调根类型名、包名、字段类型精度(如 int64 改 int)以及是否使用指针类型,就可以放进真正的 Go 项目中。配合一键复制和 model.go 下载,可以显著减少联调和建模阶段的重复工作。
把工具生成的 struct 复制到项目后,可直接用 encoding/json 反序列化 API 响应。
package main
import (
"encoding/json"
"fmt"
)
// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
func main() {
data := []byte(`{
"id": 1,
"name": "Alice",
"tags": ["admin", "dev"],
"address": {"city": "Beijing"}
}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
panic(err)
}
fmt.Println(u.Name, u.Address.City)
}如果 API 某些字段可能不存在,可把对应字段改为指针类型或配合 omitempty 标签使用。
package main
import "encoding/json"
// 手动将字段改为指针,缺失时值为 nil
type User struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
}
func main() {
data := []byte(`{"id": 1, "name": "Bob"}`)
var u User
json.Unmarshal(data, &u)
if u.Email == nil {
println("Email 字段缺失")
}
}将 JSON 内容粘贴到左侧输入框,工具会在 400ms 内自动转换并在右侧显示生成的 Go struct。也可以拖拽上传 .json/.txt 文件,或点击「示例」加载内置数据。转换完成后可一键复制或下载 model.go 文件。
包含。工具基于 quicktype-core 生成 Go 代码,默认会为每个 struct 字段附带 `json:"原始字段名"` 标签,方便直接用 encoding/json 的 Unmarshal/Marshal 进行序列化与反序列化。
会。JSON 数组会根据元素类型生成对应的切片类型,例如 `["a","b"]` 生成 `[]string`,`[1,2,3]` 生成 `[]int64`,`[{...},{...}]` 生成 `[]UserItem` 等自定义类型。
会。每个嵌套对象都会递归生成独立的 struct 类型,命名采用 PascalCase。例如 `address` 对象会生成 `Address` struct,主 struct 中通过 `Address Address` 字段引用。
JSON 中的 null 值通常会被推断为 `interface{}`,这是安全兜底类型。如果你已知该字段实际类型,可在 JSON 中补充一个示例值后重新生成,再手动调整为具体类型。
可以。工具默认使用根类型名(如 User),在设置中修改根类型名后,所有关联的子类型命名会同步更新,下载的文件名也会随之改变。
工具会自动检测 JSON 合法性,如果存在尾随逗号、单引号、缺引号等常见错误,会显示「修复 JSON」按钮。点击后工具会尝试自动修复并重新生成 Go struct;无法修复时会给出具体错误位置。
不会。所有 JSON 解析、类型推断和 Go 代码生成都在你的浏览器内通过 Web Worker 完成,输入内容和生成的代码不会上传到任何服务器,也不会被记录到云端。包含 API 密钥、token 或业务数据的敏感 JSON 也可以放心使用。
可以。生成的代码是标准 Go struct,带有 json 标签,可直接复制到项目的 types/ 或 models/ 目录下使用。建议根据项目命名规范微调类型名和包名。
完全免费,无需注册或登录。打开页面即可使用,没有任何功能限制、水印或强制登录。
工具没有严格的文件大小限制,但转换速度和渲染性能取决于浏览器与设备性能。建议处理 1MB 以内的 JSON 以获得最佳体验;超大 JSON 可先通过 JSON 格式化或拆分工具处理。
不会。工具会区分整数和浮点数:整数字段生成 int64,浮点数字段生成 float64。如果希望使用 int、uint64 等更具体的类型,可在生成后手动替换。
左侧输入框为空或只有空白字符。请粘贴有效 JSON,或点击「示例」加载数据,或拖拽上传 .json/.txt 文件。
点击输入框下方的「修复 JSON」按钮,工具会自动尝试修复尾随逗号、单引号、缺引号、JS 风格对象等问题。修复后会高亮显示修改后的结果。
工具会按 JSON key 生成 PascalCase 字段名。如果 key 包含中文或特殊字符,可能会生成转义后的字段名。建议把 JSON key 改为英文小写或 snake_case,生成后再统一调整。
由于 null 无法推断具体类型,工具用 interface{} 兜底。你可以在源 JSON 中给该字段一个示例值(如 "" 或 0),重新生成后把类型改成 string/int64 等实际类型。
浏览器渲染超大 JSON 和大量 struct 会消耗较多内存。建议:① 只保留关键字段的示例 JSON;② 拆分成多个对象分别转换;③ 关闭页面其他占用内存的标签。
当数组为空 [] 或元素类型不一致时,工具会用 interface{} 兜底。可补充同类型示例元素,或在生成后手动把类型改为 []string、[]int64 等具体切片类型。
本工具根据 JSON 值的类型自动推断对应的 Go 类型,常见映射关系如下:
| JSON 值示例 | 生成 Go 类型 | 说明 |
|---|---|---|
"hello" | string | 字符串直接映射 |
true / false | bool | 布尔值 |
42 | int64 | 无小数点的数字 |
3.14 | float64 | 含小数点的数字 |
null | interface{} | 无法推断具体类型时的安全兜底 |
["a","b"] | []string | 字符串数组 |
[1,2,3] | []int64 | 整数数组 |
[{...},{...}] | []UserItem | 对象数组,元素类型递归生成 |
{"id":1} | User | 对象生成独立 struct |
工具默认使用 int64 和 float64,实际项目中可按需求调整:
| 场景 | 推荐类型 | 原因 |
|---|---|---|
| 普通整数 ID、计数 | int64 | 与工具默认一致,兼容大多数 JSON 数字 |
| 数据库自增主键已知为正 | uint64 | 避免负数,语义更清晰 |
| 32 位系统或明确小范围整数 | int32 | 减少内存占用 |
| 价格、经纬度、科学计算 | float64 | 与工具默认一致,标准浮点精度 |
| 精确货币计算 | decimal.Decimal / int | float64 有精度风险,建议使用 shopspring/decimal 或以分为单位的 int |
本 JSON 转 Go 工具的所有处理完全在你的浏览器本地完成:JSON 解析、类型推断、Go 代码生成全部通过 Web Worker 在客户端执行,输入的 JSON 内容、上传的文件以及生成的 Go 代码都不会上传到任何服务器,也不会被记录、缓存或存储到云端。关闭或刷新页面后,所有输入和输出内容自动从内存清除,仅 localStorage 会保留你最近输入的历史记录(可随时清空)。适合处理含 API 密钥、token、敏感业务数据的 JSON。