使用重复的JSON映射将JSON反序列化为结构

时间:2019-05-30 21:36:28

标签: go

我正在尝试反序列化看起来像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"`
}

1 个答案:

答案 0 :(得分:0)

否;该错误清楚地表明您正在尝试将两个结构字段映射到相同的JSON字段名称,这是您无法做到的;同样,也没有给出用于这些字段的类型的定义,但是鉴于JSON将它们都当作简单字符串,因此它们似乎不正确。

您有两个字段patternrange。每个值都是一个对象。这些对象每个都有一个名为@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"`
}