关于此工具
Go 结构体是在 Go 中建模 JSON 的惯用方式:每个导出字段都带有一个 `json:"..."` 结构体标签,标准库 `encoding/json` 包会用它来序列化和反序列化数据。这个转换器解析一份 JSON 样本,为每个值推断出一个 Go 类型——整数用 `int`,小数用 `float64`,还有 `string`、`bool`、用于 null 或未知值的 `interface{}`,以及用于数组的 `[]T`——并输出 PascalCase 的导出字段名,同时在标签中保留原始的键。对象数组会被合并为单一形状,使生成的结构体包含在各元素中出现过的每一个键。
用它为 HTTP API 搭建请求和响应类型的骨架,建模配置文件或 webhook 载荷,或者把来自 NoSQL 存储的示例文档转换为可直接粘贴进你的包中的有类型结构体。命名根结构体,在标签上开启 `,omitempty`,并在为嵌套对象生成各自命名的类型还是内联匿名结构体之间做选择——前者适合快速的一次性模型,后者适合可复用的共享类型。
一切都在你的浏览器中以客户端方式运行——你的 JSON 在本地解析,绝不会发送到服务器。
常见问题
JSON 类型是如何映射到 Go 类型的?
整数变成 `int`,小数变成 `float64`,字符串变成 `string`,布尔值变成 `bool`,而 `null`(或任何未知值)变成 `interface{}`。数组变成元素类型的 Go 切片 `[]T`,嵌套对象变成命名结构体(如果你开启该选项,则变成内联匿名结构体)。
为什么我像 user_id 这样的字段名被转换成了 UserID?
Go 会导出以大写字母开头的字段,因此键会被转换为 PascalCase。常见的首字母缩写词——ID、URL、API、HTTP——会保持全大写以遵循 golint 约定,所以 `user_id` 变成 `UserID`,`api_url` 变成 `APIURL`。原始的键会保留在 json 结构体标签中。
omitempty 选项有什么作用?
在结构体标签中加上 `,omitempty` 会告诉 `encoding/json`:当该字段为其零值(0、""、false、nil,或空切片/映射)时,把它从序列化后的 JSON 中省略。它只影响编码,不影响解码。