跳到主要内容

语言桥梁:JSON To Go结构

使用 json-to-go 的移植版本根据 JSON 生成 Go struct 定义,并用 gofmt 格式化。键变为导出的 CamelCase 字段并带 json:"..." 标签;嵌套对象变为内联匿名 struct,null 变为 any。

编写用于 json.Unmarshal 第三方 REST API 响应的 struct。

适用场景

  • 编写用于 json.Unmarshal 第三方 REST API 响应的 struct。
  • 根据示例数据快速搭建 Go HTTP handler 的请求和响应类型。

使用方法

  1. 将 JSON 对象或数组粘贴到左侧编辑器。
  2. 查看生成的 struct;根类型始终命名为 AutoGenerated。
  3. 复制到你的包中,重命名类型;如需复用内联 struct,可将其提取为命名类型。

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Go struct

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

功能与限制

生成在浏览器中进行。没有类型名、内联或命名 struct、标签方面的设置。

首字母缩略词会全部大写(id 变为 ID),snake_case 变为 CamelCase,原始键保留在 json 标签中。

整数变为 int(较大时为 int64),小数变为 float64。null、空数组和混合类型数组变为 any 或 []any。

数组中的对象结构不同时,部分对象缺少的键会加上 ,omitempty。

FAQ

能转换根节点为数组的 JSON 吗?

可以。会生成 type AutoGenerated []struct{...},合并数组中所有对象的字段。

为什么我的 null 字段类型是 any?

null 值不携带类型信息。请把 any 替换为 *string 或 *time.Time 这样的指针,以保留对 nil 的支持。

会生成命名的嵌套 struct 吗?

不会。嵌套对象是内联匿名 struct。如需引用它们,请手动移到命名类型中。

规范与参考资料