иди, лэнг Джсон.Маршал нотв

# #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: { являются недопустимыми . В { нем отсутствует тип спереди. С анонимными типами структур такие составные литералы трудно инициализировать. Поэтому обычно рекомендуется не использовать анонимные типы структур в полях, которые вы планируете инициализировать составным литералом.