我正在尝试反序列化看起来像this的JSON:
{
"pattern": {"@odata.type": "microsoft.graph.recurrencePattern"},
"range": {"@odata.type": "microsoft.graph.recurrenceRange"}
}
为此,我创建了多个结构,第一个结构如下:
type MSPatternedRecurrence struct {
Pattern MSRecurrencePattern `json:"@odata.type"`
Range MSRecurrenceRange `json:"@odata.type"`
}
但是兽医会像这样抛出错误:
struct field Range repeats json tag "@odata.type"
在这种情况下创建结构的正确方法是什么?
类型MSPatternedRecurrence结构{
模式MSRecurrencePattern json:"@odata.type"
范围MSRecurrenceRange json:"@odata.type"
}
type MSRecurrencePattern struct {
DayOfMonth int `json:"dayOfMonth"`
DayOfWeek []string `json:"daysOfWeek"`
FirstDayOfWeek string `json:"firstDayOfWeek"`
Index string `json:"index"`
Interval int `json:"interval"`
Month int `json:"month"`
Type string `json:"type"`
}
type MSRecurrenceRange struct {
EndDate string `json:"endDate"`
NumberOfOccurrences int `json:"numberOfOccurrences"`
RecurrenceTimeZone string `json:"recurrenceTimeZone"`
StartDate string `json:"startDate"`
Type string `json:"type"`
}
答案 0 :(得分:0)
否;该错误清楚地表明您正在尝试将两个结构字段映射到相同的JSON字段名称,这是您无法做到的;同样,也没有给出用于这些字段的类型的定义,但是鉴于JSON将它们都当作简单字符串,因此它们似乎不正确。
您有两个字段pattern
和range
。每个值都是一个对象。这些对象每个都有一个名为@odata.type
的字段。即:
type Odata struct {
Type string `json:"@odata.type"`
}
type MSPatternedRecurrence struct {
Pattern Odata
Range Odata
}
您可能会发现JSON-to-Go工具很有用。对于此JSON,它输出:
type AutoGenerated struct {
Pattern struct {
OdataType string `json:"@odata.type"`
} `json:"pattern"`
Range struct {
OdataType string `json:"@odata.type"`
} `json:"range"`
}