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

如何覆盖 Go 结构中的 json 标签?

如何覆盖 Go 结构中的 json 标签?

Go
白衣染霜花 2021-12-07 14:52:35
我想编组这个结构的一部分:type ValueSet struct {    Id           string                       `json:"id" bson:"_id"`    Url          string                       `bson:"url,omitempty" json:"url,omitempty"`    Identifier   *Identifier                  `bson:"identifier,omitempty" json:"identifier,omitempty"`    Version      string                       `bson:"version,omitempty" json:"version,omitempty"`    Name         string                       `bson:"name,omitempty" json:"name,omitempty"`    Status       string                       `bson:"status,omitempty" json:"status,omitempty"`    Experimental *bool                        `bson:"experimental,omitempty" json:"experimental,omitempty"`    Publisher    string                       `bson:"publisher,omitempty" json:"publisher,omitempty"`    Contact      []ValueSetContactComponent   `bson:"contact,omitempty" json:"contact,omitempty"`    Date         *FHIRDateTime                `bson:"date,omitempty" json:"date,omitempty"`    LockedDate   *FHIRDateTime                `bson:"lockedDate,omitempty" json:"lockedDate,omitempty"`    Description  string                       `bson:"description,omitempty" json:"description,omitempty"`    UseContext   []CodeableConcept            `bson:"useContext,omitempty" json:"useContext,omitempty"`    Immutable    *bool                        `bson:"immutable,omitempty" json:"immutable,omitempty"`    Requirements string                       `bson:"requirements,omitempty" json:"requirements,omitempty"`    Copyright    string                       `bson:"copyright,omitempty" json:"copyright,omitempty"`}这是HL7 FHIR的 Go 实现的一部分,仅包括元数据字段,并省略了三个内容三个字段(codeSystem、compose 和 expand)。我不能(也不应该)更改原始源代码中的 JSON 标签,因为其他代码强烈依赖于它的编写方式。如何告诉 json.Marshal 覆盖这些结构元素上的现有 JSON 标记?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

你不能改变它,但你没有必要。


最简单的解决方案是创建您自己的结构,定义您自己的 json 标签(您希望它们如何出现在输出中),复制字段,并编组您自己的结构的值。


例如,假设您要编组Id和Url字段,然后:


type MyValueSet struct {

    Id string  `json:"MyId"`

    Url string `json:"MyUrl"`

}


var vs ValueSet = ... // Comes from somewhere


mvs := MyValueSet {

    Id:  vs.Id,

    Url: vs.Url,

}


data, err := json.Marshal(&mvs)

// Check err


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信