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

问题描述 投票:2回答:1

我试图弄清楚在结构下面编组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 go struct marshalling slice
1个回答
3
投票

您可以通过实现json.Marshaler接口来实现任何自定义编组逻辑。

因此,只需在MarshalJSON() ([]byte, error)上实现Role方法,在其中您将其编组为简单的int数字。

这是它的样子:

func (r Role) MarshalJSON() ([]byte, error) {
    return json.Marshal(r.Role)
}

正如你所看到的,Role.MarshalJSON()只调整了Role.Role int场,而不是整个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]}
© www.soinside.com 2019 - 2024. All rights reserved.