繁体   English   中英

将元帅的结构切片作为数字切片

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM