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 關注
- 162 瀏覽
添加回答
舉報