Я пытаюсь инициализировать вложенную структуру, чтобы затем выполнить маршализацию в json для ответа API.Проблема, с которой я сталкиваюсь, состоит в том, что один из компонентов (часть структур) может иметь n элементов, но одного из двух возможных типов (текст, изображение).
JSON, который я хочу создать, выглядит следующим образом:this:
{
"messages": [
{
"message_parts": [
{
"text": {
"content": "dfdffd"
}
},
{
"image": {
"url": "https://image.jpg"
}
}
],
"actor_id": "44444444",
"actor_type": "agent"
}
],
"channel_id": "44444444",
"users": [
{
"id": "44444444"
}
]
}
В слайсе message_parts, который может содержать как минимум один текст или изображение, но, возможно, один из них.
Мои структуры в настоящее время выглядят так:
Type messagePayload struct {
Messages []Messages `json:"messages"`
Status string `json:"status,omitempty"`
ChannelID string `json:"channel_id"`
Users []Users `json:"users"`
}
type Messages struct {
MessageParts []MessageParts `json:"message_parts"`
ActorID string `json:"actor_id"`
ActorType string `json:"actor_type"`
}
type Users struct {
ID string `json:"id"`
}
type Text struct {
Content string `json:"content,omitempty"`
}
type MessageParts struct {
Text *Text `json:"text,omitempty"`
Image *Image `json:"image,omitempty"`
}
type Image struct {
URL string `json:"url,omitempty"`
}
Я действительно изо всех сил пытаюсь инициализировать это так, чтобы это не отображалось в json, если их нет.
вот где я нахожусь, но это, очевидно, не работает:
payload := &messagePayload{
Messages: []Messages{
{
MessageParts: []MessageParts{
{
&Text{
Content: text,
},
},
{
&Image{
URL: mediaurl,
},
},
},
ActorID: agentID,
ActorType: "agent",
}},
ChannelID: channelid,
Users: []Users{
{
ID: user,
},
},
}
РЕДАКТИРОВАТЬ: Благодаря подсказке ниже и нескольким другим выводам, я обнаружил, что лучший способ - инициализировать полезную нагрузку.и затем добавьте фрагменты для текста и изображений по мере необходимости: https://play.golang.org/p/Pmmv00spcI6