【问题标题】:How can I override json tags in a Go struct?如何覆盖 Go 结构中的 json 标签?
【发布时间】:2016-01-20 19:48:09
【问题描述】:

我想编组this struct的一部分:

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"`
    Extensible   *bool                        `bson:"extensible,omitempty" json:"extensible,omitempty"`
    CodeSystem   *ValueSetCodeSystemComponent `bson:"codeSystem,omitempty" json:"codeSystem,omitempty"`
    Compose      *ValueSetComposeComponent    `bson:"compose,omitempty" json:"compose,omitempty"`
    Expansion    *ValueSetExpansionComponent  `bson:"expansion,omitempty" json:"expansion,omitempty"`
}

这是HL7 FHIR 的 Go 实现的一部分,仅包括元数据字段,并省略了三个内容三个字段(codeSystem、compose 和扩展)。我不能(也不应该)更改原始源代码中的 JSON 标记,因为其他代码强烈依赖于它的编写方式。如何告诉 json.Marshal 覆盖这些结构元素上现有的 JSON 标记?

【问题讨论】:

    标签: json go marshalling hl7-fhir


    【解决方案1】:

    你不能改变它,但你不必这样做。

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

    例如假设您要编组 IdUrlfields,然后:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2021-10-01
      相关资源
      最近更新 更多