# #json #http #go
#json #http #Вперед
Вопрос:
Я изо всех сил пытаюсь создать надлежащую полезную нагрузку json для http — запроса:
type CreateOrga struct { Data struct { Type string `json:"type"` Attributes struct { Name string `json:"name"` Email string `json:"email"` } `json:"attributes"` } `json:"data"` } email := "my@mail.com" value := CreateOrga{ Data: { Type: "organizations", Attributes: { Name: "API", Email: email, }, }, } json, _ := json.Marshal(value) req, _ := http.NewRequest("POST", url, bytes.NewBuffer(json)) req.Header.Add("Authorization", bearer) req.Header.Add("Content-Type", "application/vnd.api json") // resp, err := http.Post(url, "application/json", payload) client := amp;http.Client{} resp, err := client.Do(req) if err != nil { log.Fatalf("An error occured %v", err) } defer resp.Body.Close()
Однако я всегда получаю missing ',' before newline in composite literal
. Что я здесь делаю не так? Нужно ли мне создавать структуру?
Комментарии:
1.Тип
map[string]map[string]string
и ваш составной литерал{ ... }
совершенно не настроены. Составной литерал карты ДОЛЖЕН находиться{ Key:Value[, ...] }
там, где обаKey
иValue
являются выражениями, которые оцениваются по соответствующим типам. Для начала, ваш первый элемент в составном литерале карты не имеетKey
.2. Еще одна проблема в вашем составном литерале заключается в том , что во вложенной карте вы определили тип значения как
string
, но на самом деле пытаетесь вложить в него другую карту. Если вы хотите, чтобы значения карты принимали строки и другие карты, вам нужно объявить тип значения какinterface{}
вместоstring
.3. хорошо, спасибо. Скорее всего, мне нужно построить
struct
первый и маршал его, верно?4. Это выполнимо с картами, но, по моему предвзятому мнению, структуры-гораздо более приятный подход.
5. Go не поддерживает исключение типа, анонимного или нет, в составных литералах структуры. т. е.
Data: {
иAttributes: {
являются недопустимыми . В{
нем отсутствует тип спереди. С анонимными типами структур такие составные литералы трудно инициализировать. Поэтому обычно рекомендуется не использовать анонимные типы структур в полях, которые вы планируете инициализировать составным литералом.