如何在匿名嵌套结构体中使用JSON标签?
问题解答
当然可行,你当前代码报错是因为结构体标签的语法位置错误,把标签放在了不符合Go语法规范的位置。
错误原因
你原代码里将json:"_links"标签写在了内部struct关键字的前面,这是错误的写法。Go的结构体字段标签必须紧跟在字段类型的后面,而非struct关键字之后。
修正后的代码
func wrapHal(selfHref string) interface{} { return struct { // 把json标签放在字段类型(此处为struct{})的后方 Links struct { Self struct { Href string } } `json:"_links"` }{ Links: struct { Self struct { Href string } }{ Self: struct { Href string }{ Href: selfHref, }, }, } }
验证效果
调用该函数并通过json.Marshal序列化后,会得到符合预期的JSON结果:
{"_links":{"Self":{"Href":"传入的selfHref参数值"}}}
可选优化方案
如果觉得重复定义匿名结构体过于繁琐,可以提前定义内部结构体类型,提升代码可读性和扩展性:
type HalLink struct { Href string } type HalLinks struct { Self HalLink } type HalResponse struct { Links HalLinks `json:"_links"` } func wrapHal(selfHref string) interface{} { return HalResponse{ Links: HalLinks{ Self: HalLink{Href: selfHref}, }, } }
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

