Десериализовать JSON в структуру с дублированием отображения JSON - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь десериализовать JSON, который выглядит как this :

{
  "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 struct { Шаблон 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 голосов
/ 31 мая 2019

Нет; ошибка ясно говорит о том, что вы пытаетесь сопоставить два структурных поля с одним и тем же именем поля JSON, что вы не можете сделать; кроме того, определения для типов, используемых для этих полей, не даны, но вряд ли они верны, учитывая, что JSON использует их как простые строки.

У вас есть два поля, pattern и range. Ценность каждого - это объект. Каждый из этих объектов имеет поле с именем @odata.type. I.e.:

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"`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...