Ответ события календаря Microsoft на структуру Go - PullRequest
1 голос
/ 07 августа 2020

пытался демаршалировать ответ от Microsoft Graph API в структуру Go, но я продолжаю получать сообщение об ошибке «json: невозможно демаршалировать объект в Go поле структуры .value.start типа [] struct {DateTime string "json:" dateTime ""; TimeZone string "json:" timeZone ""} ".

Ниже моя структура:

type MicrosoftCalendarEventsResponse struct {   
    Value []struct {
        Etag    string `json:"@odata.etag"`
        Id      string `json:"id"`
        Subject string `json:"subject"`
        Start   []struct {
            DateTime string `json:"dateTime"`
            TimeZone string `json:"timeZone"`
        } `json:"start"`
        End []struct {
            DateTime string `json:"dateTime"`
            TimeZone string `json:"timeZone"`
        } `json:"end"`
        OriginalStartTimeZone string `json:"originalStartTimeZone"`
        OriginalEndTimeZone   string `json:"originalEndTimeZone"`
        ICalUId                    string `json:"iCalUId"`
        ReminderMinutesBeforeStart int    `json:"reminderMinutesBeforeStart"`
        IsReminderOn               bool   `json:"isReminderOn"`
    } `json:"value"`
}

Я получил ответ это:

{"@odata.etag":"W/\"8COqS12xxxhwcMA==\"","id":"xxxxx","createdDateTime":"2019-12-05T17:09:41.018502Z","lastModifiedDateTime":"2019-12-05T17:09:41.8919929Z","changeKey":"xxxx","categories":[],"originalStartTimeZone":"W. Europe Standard Time","originalEndTimeZone":"W. Europe Standard Time","iCalUId":"xxx","reminderMinutesBeforeStart":15,"isReminderOn":true,"hasAttachments":false,"subject":"Something","bodyPreview":"","importance":"normal","sensitivity":"normal","isAllDay":false,"isCancelled":false,"isOrganizer":true,"responseRequested":true,"seriesMasterId":null,"showAs":"busy","type":"singleInstance","webLink":"xxx","onlineMeetingUrl":null,"isOnlineMeeting":false,"onlineMeetingProvider":"unknown","allowNewTimeProposals":true,"recurrence":null,"onlineMeeting":null,"responseStatus":{"response":"organizer","time":"0001-01-01T00:00:00Z"},"body":{"contentType":"html","content":""},"start":{"dateTime":"2019-12-17T17:00:00.0000000","timeZone":"UTC"},"end":{"dateTime":"2019-12-17T17:30:00.0000000","timeZone":"UTC"},"location":{"displayName":"","locationType":"default","uniqueIdType":"unknown","address":{},"coordinates":{}},"locations":[],"attendees":[],"organizer":{"emailAddress":{"name":"John Doe","address":"someone@somewhere.com"}}}

, в котором вы можете ясно видеть часть, которая дает ошибку:

"start":{"dateTime":"2019-12-17T17:00:00.0000000","timeZone":"UTC"}

может кто-нибудь, пожалуйста, скажите мне, что я делаю не так? часами пытался без какого-либо прогресса, и я действительно понятия не имею, что не так.

Другие вещи, такие как Etag, Id, Subject и т. д., работают правильно. Не работают только вложенные структуры [].

1 Ответ

1 голос
/ 07 августа 2020

Для захвата событий календаря (множественное число) имеет смысл, что верхний уровень Values представляет собой фрагмент структур.

Однако внутри конкретного Value ваши Start и End поля определяются также как фрагменты структур, что, вероятно, не то, что вам нужно.

Попробуйте использовать простую структуру:

Start struct {
        DateTime string `json:"dateTime"`
        TimeZone string `json:"timeZone"`
} `json:"start"`

End struct {
        DateTime string `json:"dateTime"`
        TimeZone string `json:"timeZone"`
} `json:"end"`
...