为了账号安全,请及时绑定邮箱和手机立即绑定

如何在结构中嵌入接口而不使接口名称成为 JSON 中的键?

如何在结构中嵌入接口而不使接口名称成为 JSON 中的键?

Go
繁花如伊 2022-05-18 14:30:34
我有一个由许多不同类型实现的接口 EventAggregation。我需要使用相同的两个字段来丰富所有这些类型,所以我正在做这样的事情:type messagePayload struct {    domain.EventAggregation    SourceSystem     string `json:"sourceSystem"`    MessageTimestamp int    `json:"messageTimestamp"`}然后我用这个方法把它翻译成一个字符串:func (payload messagePayload) payloadToString() string {    jsonForm, _ := json.Marshal(payload)    return string(jsonForm)}但它会创建一个以“EventAggregation”为键的字符串,并且字段作为对象嵌入其中,如下所示:{"EventAggregation":{"startTime":1575941942501,"endTime":1581461995869,"computeTimestamp":1582573485983,"eventType":"foo","count":146692},"sourceSystem":"bar","messageTimestamp":1582573497406}如何以使 EventAggregation 中的字段与字段“SourceSystem”和“MessageTimestamp”处于同一级别的方式创建字符串?像这样:{"startTime":1575941942501,"endTime":1581461995869,"computeTimestamp":1582573485983,"eventType":"foo","count":146692,"sourceSystem":"bar","messageTimestamp":1582573497406}如果嵌入式对象是结构而不是接口,则相同的代码似乎可以工作,但考虑到有多少不同的结构实现了“EventAggregation”接口,这并不是超级实用。
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

如果我理解你的问题,也许它可以帮助你:


type messagePayload struct {

    domain.EventAggregation `json:"-"`

    SourceSystem     string `json:"sourceSystem"`

    MessageTimestamp int    `json:"messageTimestamp"`

}


查看完整回答
反对 回复 2022-05-18
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您需要做的就是在 json 编码时忽略此文件。试试这个:

type messagePayload struct {
    domain.EventAggregation `json:"-"`
    SourceSystem     string `json:"sourceSystem"`
    MessageTimestamp int    `json:"messageTimestamp"`}

要查看更多支持的标签,请访问: https ://golang.org/pkg/encoding/json/#Marshal


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号