JSON 至Go结构
粘贴 JSON 示例即可获取可被encoding/json清晰解析的Go结构体定义。字段会被导出(格式为CamelCase),保留原始 JSON 键标签;当值可能为空时会转换为指针类型;嵌套对象则拥有独立的命名结构体声明。
如何将 JSON 转换为 Go 结构体
-
1
粘贴 JSON
单个样本即可满足需求;使用多个样本可提升可缺失值推断的准确性。
-
2
选择名称
导出字段的 PascalCase 是 Go 语言的标准规范。请选择缩写格式(例如 `URL` 对比 `Url`,或 `ID` 对比 `Id`)。
-
3
选择可选策略
对于可为空字段,请使用指针(最符合规范)或`omitempty`标签。
-
4
复制结构体
一个根结构及嵌套结构。将其粘贴到 `.go` 文件中,然后选择 `go build`。
示例输出
对于以下输入:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
输出:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
类型映射
| JSON 值 | Go 类型 |
|---|---|
| 字符串 | string |
| 整数 | int 或 int64 |
| 数值(小数) | float64 |
| 布尔值 | bool |
| null(与非空值的兄弟项关联) | *T(指针) |
| 数组 | []T |
| 对象 | 带名称的结构体 |
| 混合数组 | []interface{} |
生成器遵循的命名惯例
- 首字母大写:
id→ID,url→URL,api_key→APIKey。此格式符合 Go 语言推荐的样式(以及go vet/staticcheck的规范要求)。 - snake_case JSON → PascalCase 字段:
first_name→FirstName。 - 保留单字缩写形式:
IP保持为IP,HTTP保持为HTTP。 - ** JSON 标签**:
json:"first_name"保留原始键,确保编码与解码过程顺畅无误。
可选字段:指针还是 omitempty?
| 策略 | 适用场景 |
|---|---|
指针(*T) |
需区分“缺失”与“零值” |
omitempty |
在序列化时仅需跳过零值;反序列化时会将缺失值存储为零 |
| 无 | 该字段始终存在,且零值具有实际意义 |
该生成器默认将所有被视为空值的内容标记为指针+omitempty;具体设置可根据您的语义需求进行调整。
常见错误
- 在32位目标系统中,当 JSON 整数值超过
MaxInt32时,请使用int;对于已知的大值,则使用int64。 - 重新编码会丢失键的顺序。
encoding/json按字段声明顺序输出键,而非原始 JSON 顺序。如需规范输出,请手动排序。 - 混合结构数组。
[]interface{}已失去类型安全性。建议改用带有type标识字段的联合类型。 - 在可选字段中忽略
omitempty。 若未使用该字段,可选字段将被序列化为"foo": null而非省略。
常见问题
当需要区分“字段为空”与“字段值为零”时,请使用指针;若零值不属于合法业务值,则使用 omitempty(""、0、false 均表示“跳过该字段”)。多数团队会选择一种标准代码规范并在整个代码库中统一应用。
每个嵌套对象均会成为独立的命名结构体声明(例如 User → Address)。仅当嵌套结构体体积极小且仅使用一次时,才将类型内联;否则可获得简洁且可复用的类型。
是的。id将变为ID,url将变为URL,api_key将变为APIKey。这正是go vet所要求的,也是大多数Go语言风格指南的推荐做法。
该生成器输出带有标准json:标签的普通结构体。对于自定义UnmarshalJSON实现(例如非ISO格式的日期数据),需在生成后手动添加相应标签。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- JSON till Go-struktur [SV]
- JSON إلى بنية Go [AR]
- JSON naar Go-structuur [NL]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON thành cấu trúc [VI]
- JSON ke Struktur Go [ID]
- JSON a Estructura Go [ES]
- JSON→Go構造体 [JA]
- JSON을 Go 구조체로 변환 [KO]
- JSON vers Go Struct [FR]
- JSON zu Go Struct [DE]
- JSON na strukturę Go [PL]
- JSON para Estrutura Go [PT]
- JSON в структуру данных [RU]
- JSON'dan Go Yapısına [TR]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]