[英]Marshal slice of structs as slice of numbers
我试图弄清楚编组到JSON字符串的最佳方法是什么:
type User struct {
Id string `json:"id"`
Roles []Role `json:"roles"`
}
type Role struct {
Id string `json:"-"`
Role int
}
获取JSON输出,例如: {"id": "abc", "roles": [1, 2, 3]}
您可以通过实现json.Marshaler
接口来实现任何自定义的封送处理逻辑。
所以,简单地实现MarshalJSON() ([]byte, error)
的方法Role
,在其中元帅它像一个简单的int
数。
它看起来像这样:
func (r Role) MarshalJSON() ([]byte, error) {
return json.Marshal(r.Role)
}
如您所见, Role.MarshalJSON()
仅Role.Role
int
字段,而不Role.Role
整个struct
。
测试它:
u := User{
Id: "abc",
Roles: []Role{
Role{Id: "a", Role: 1},
Role{Id: "b", Role: 2},
Role{Id: "c", Role: 3},
},
}
if err := json.NewEncoder(os.Stdout).Encode(u); err != nil {
panic(err)
}
输出是您期望的(在Go Playground上尝试):
{"id":"abc","roles":[1,2,3]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.