3 回答
TA贡献1963条经验 获得超6个赞
最简单的可能是处理所有可能的字段并进行一些后处理。
例如:
type MyType struct {
DateField1 []string `xml:"value"`
DateField2 []string `xml:"anotherValue"`
}
// After parsing, you have two options:
// Option 1: re-assign one field onto another:
if !someCondition {
parsed.DateField1 = parsed.DateField2
parsed.DateField2 = nil
}
// Option 2: use the above as an intermediate struct, the final being:
type MyFinalType struct {
Date []string `xml:"value"`
}
if someCondition {
final.Date = parsed.DateField1
} else {
final.Date = parsed.DateField2
}
注意:如果消息差异很大,您可能需要完全不同的类型进行解析。后处理可以从其中任何一个生成最终结构。
TA贡献1818条经验 获得超11个赞
如前所述,您必须复制该字段。问题是重复应该存在于何处。
如果它只是多个字段中的一个,一种选择是使用嵌入和字段阴影:
type MyType struct {
Date []string `xml:"value"`
// many other fields
}
然后当Date使用其他字段名称时:
type MyOtherType struct {
MyType // Embed the original type for all other fields
Date []string `xml:"anotherValue"`
}
然后在解组之后MyOtherType,很容易将Date值移动到原始结构中:
type data MyOtherType
err := json.Unmarshal(..., &data)
data.MyType.Date = data.Date
return data.MyType // will of MyType, and fully populated
请注意,这仅适用于解组。如果您还需要编组这些数据,可以使用类似的技巧,但围绕它的机制必须从本质上颠倒过来。
- 3 回答
- 0 关注
- 119 浏览
添加回答
举报