开发者 / JSON

JSON转Go结构体

粘贴JSON示例,即可获得Go结构体定义,包含导出字段名、Go代码检查工具要求的缩写词和json标签,可直接粘贴到代码中。

JSON转Go结构体: 转换器会在浏览器中读取JSON,并为每个对象生成一个结构体。键会转换为导出的CamelCase名称,其中ID、URL和HTTP等缩写词会使用大写形式,符合golint的建议;每个字段都会在json标签中保留原始键名,格式则按照gofmt的方式排版。数组中的对象会合并处理,因此某些对象缺少的键会获得omitempty,而有时为null的键会转换为指针。整数会转换为int64,除非同一位置出现小数,此时会转换为float64。 完全在浏览器中本地运行,文件不会上传到服务器。

使用次数
在浏览器中
费用
免费·无需注册
可用性
可直接使用
JSON转换为Go结构体本地处理

完全在浏览器中运行

开始

type User struct {
	ID        int64    `json:"id"`
	UserName  string   `json:"user_name"`
	AvatarURL string   `json:"avatar_url"`
	Score     float64  `json:"score"`
	Tags      []string `json:"tags"`
	Address   Address  `json:"address"`
}

type Address struct {
	City    string `json:"city"`
	ZipCode string `json:"zip_code"`
}

数组中部分对象缺少的键会添加omitempty;有时为null的键会变为指针。请根据API文档检查类型:示例只能展示其中包含的内容。

从示例到类型

Go使用encoding/json将JSON解码为结构体,并根据json标签将每个键匹配到字段;如果没有标签,则会忽略大小写并按名称匹配。只有导出的字段,也就是以大写字母开头的字段,才会被填充,因此这里的每个字段都以大写字母开头,并在标签中保留原始键名。

一个示例只能展示其中包含的内容。如果用户列表中的某个用户缺少email,转换器会知道email是可选的;但单个对象无法说明这一点。如果有多个具有代表性的对象,请将它们放入数组后粘贴,并根据API文档检查结果。JSON格式化工具可以先帮助你看清长响应的结构。

其他语言和架构

同一个示例可以通过JSON转TypeScript转换器生成TypeScript接口,用于读取同一API的前端;也可以生成JSON Schema,在数据边界验证数据载荷。

使用方法

  1. 粘贴JSON对象或数组,例如API响应。
  2. 为顶层类型命名,并选择使用独立结构体还是嵌套结构体。
  3. 复制Go代码。

隐私与限制

你的JSON会在浏览器中转换,绝不会上传。

相关工具

常见问题

为什么user_id会变成UserID,而不是UserId?

Go风格要求缩写词统一使用大写形式,因此是UserID、APIKey和AvatarURL。转换器使用了golint中的缩写词列表;golint是推广这一规则的代码检查工具。

字段什么时候会获得omitempty或指针?

当示例是对象数组,且某些对象缺少某个键时,该字段会获得omitempty,这样序列化时为空值会被省略。当某些对象中的键为null时,该字段会变成指针,从而可以用nil表示null。你也可以为每个字段添加omitempty。

为什么是int64和float64?

JSON只有一种数字类型。不带小数点的值会变成int64,带小数的值会变成float64。如果ID可能超过2^53,或者实际上是伪装成数字的字符串,请手动修改类型:示例只能展示其中包含的值。

null或空数组会怎样处理?

由于没有足够信息可供判断,始终为null的字段或空数组会获得any(interface{})类型,该类型可以接受任何值。确定实际类型后,请将其替换为对应类型。

免费工具·使用在浏览器中次·无需账户