goland 不内置 json 转 go struct 功能,需依赖 json-to-go 插件或命令行工具(如 jq + json-to-go);插件支持右键转换但有格式限制,命令行更可控,生成后需手动补全 tag 和修正类型。

GoLand 里没有一键 JSON 转 Go struct 的菜单项
GoLand 本身不内置 JSON 到 Go struct 的自动转换功能,它依赖插件或外部工具完成这件事。直接在编辑器里右键、找“Convert JSON to Struct”是找不到的——这个功能不是 JetBrains 原生提供的,得靠 JSON-to-Go 插件或命令行工具配合使用。
装插件:JSON-to-Go 是最常用且稳定的方案
在 GoLand 的插件市场搜 JSON-to-Go(作者是 mohsenoid),安装后重启。它会在右键菜单中加一个 Convert JSON to Go struct 选项,但要注意几个实际限制:
- 只支持当前选中的 JSON 文本(不能跨文件、不能带注释、不能有单引号)
- 生成的 struct 字段名默认是 PascalCase,若想用
jsontag 保持小写,需勾选插件设置里的Use lowercase field names - 嵌套数组或空对象可能被识别为
interface{},需要手动补上具体类型 - 如果 JSON 里字段值是混合类型(比如有时是 string,有时是 null),插件会统一标成
*string或interface{},不能自动推导联合类型
用命令行工具:jq + json-to-go 更可控
当 JSON 结构复杂、含注释、或需要批量处理时,本地跑命令更可靠。推荐组合:jq 清洗 JSON 后喂给 json-to-go(Go 写的 CLI 工具):
cat input.json | jq -c '.' | json-to-go -pkg main -name Response
关键点:
-
jq -c '.'把格式化 JSON 压成一行,去掉注释和多余空白(json-to-go不吃带注释的 JSON) -
-pkg和-name控制生成的包名和 struct 名,不加的话默认是main和Struct - 生成结果直接复制进
.go文件即可,注意检查字段类型是否合理(比如时间戳字段常需改成time.Time)
字段名映射和 tag 处理容易漏掉
插件或工具生成的 struct 默认只有 json tag,但真实项目往往还需要 yaml、xml 或数据库相关 tag。例如:
type User struct {
ID int `json:"id" yaml:"id" db:"id"`
Name string `json:"name" yaml:"name" db:"name"`
}
这些额外 tag 不会自动生成,必须手动补。另外,如果原始 JSON 字段是 user_name,工具默认转成 UserName,但如果你希望字段名也叫 UserName(而非 Username),就得提前规范好命名规则,否则后续反序列化会失败。
真正麻烦的不是转换动作本身,而是 JSON schema 模糊时怎么猜对类型——比如 "count": 0 和 "count": null 并存,工具没法决定该用 int 还是 *int,得人来判断。











