4 回答
TA贡献1856条经验 获得超5个赞
我要说不,不是这样。
你可以这样做,
type XMLStruct struct {
Name string `json:"name" xml:"name"`
Date string `json:"Date" xml:"Date"`
}
或这个,
type XMLStruct struct {
Name string `json:"name, omitempty" xml:"name, omitempty"`
Date string `json:"Date, omitempty" xml:"Date, omitempty"`
FirstName string `json:"FirstName, omitempty" xml:"FirstName, omitempty"`
}
但我不相信你可以将多个 json 名称映射到一个结构字段,我认为这样做的原因是如果它们都存在于 json 结构中,你会保留哪一个并丢弃等等。
TA贡献1818条经验 获得超3个赞
对此没有明确的答案。在语言规范级别,结构标签是任意文本,没有固有含义。这意味着,从语言的角度来看,json:"name" json:"FirstName"
它是一个有效的标签,就像任何其他任意文本一样。
重要的是代码如何解释标签。既然您正在谈论标签json
,您可能会关心encoding/json
标准库中的包。这里和这里的文档描述了这个包如何解释标签。像这样的重复标签充其量是不明确的,因此可以说它不受支持。尽管使用这样的标签会有所作为。它的作用可能符合也可能不符合您的期望(取决于您的期望)。
但可能还有其他包可以解释json
标签——可能包括您自己编写的包。他们可以使用任何他们想要的规则,包括允许或禁止多个具有相同名称的标签段。
TA贡献1836条经验 获得超13个赞
go-struct 的字段标记实际上可以具有任何 UTF-8 序列。这是合法的代码:
type XMLStruct struct { Name string `g1bb3ri$h...T@g` }
所以标签是可以解释的。标准库中的包json
需要特定格式的标签 - 它将单个结构字段映射到单个 JSON 属性。
如果您想支持单个字段的多个属性 - 人们可以编写自己的 Marshal/Unmarshal 并按照这种新的标记格式进行操作。但正如其他一些评论/答案所暗示的那样,存在处理冲突的困境。
TA贡献1834条经验 获得超8个赞
如果您在 key:"value" 对中有相同的键,则结构标记查找将仅使用您指定的第一个值。
所以,你的结构看起来像
type XMLStruct struct {
Name string `json:"name"`
Date string `xml:"Date"`
}
- 4 回答
- 0 关注
- 107 浏览
添加回答
举报