douliao8318 2017-12-22 11:42
浏览 41
已采纳

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

I'm trying to figure out what is the best way to marshal to JSON string below structure:

type User struct {
    Id string    `json:"id"`
    Roles []Role `json:"roles"`
}

type Role struct {
    Id string    `json:"-"`
    Role int     
}

Get JSON output like: {"id": "abc", "roles": [1, 2, 3]}

  • 写回答

1条回答 默认 最新

  • dongpao1926 2017-12-22 11:50
    关注

    You can implement any custom marshaling logic by implementing the json.Marshaler interface.

    So simply implement the MarshalJSON() ([]byte, error) method on Role, in which you marshal it like a simple int number.

    This is how it could look like:

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

    As you can see, Role.MarshalJSON() only marshals the Role.Role int field, and not the whole struct.

    Testing it:

    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)
    }
    

    Output is as you expect it (try it on the Go Playground):

    {"id":"abc","roles":[1,2,3]}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程