Вложенный JSON Генерация массива в GO - PullRequest
0 голосов
/ 04 мая 2020

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

Пример кода (не работает):

package main

import "encoding/json"
import "fmt"

type DiscMessage struct {
    Embeds []struct {
        Title       string `json:"title"`
        Description string `json:"description"`
        URL         string `json:"url"`
        Color       int    `json:"color"`
    } `json:"embeds"`
}


func main() {

var values = DiscMessage{Embeds{{"title1", "description1", "url1", 6545520}}}
encjson, _:= json.Marshal(values)
fmt.Println(string(encjson))
}

Предполагаемый вывод:

{
 "embeds": [{
    "title": "title1",
    "description": "description1",
    "url": "url1",
    "color": 6545520
  }]
}

Каков наилучший подход к этому? Со временем я заменим значения переменными и добавлю больше контейнеров, например, полный дискорд (http://1009 *https://leovoel.github.io/embed-visualizer/)

1 Ответ

2 голосов
/ 04 мая 2020

Как инициализировать фрагмент анонимной структуры:

type DiscMessage struct {
    Embeds []struct {
        Title       string `json:"title"`
        Description string `json:"description"`
        URL         string `json:"url"`
        Color       int    `json:"color"`
    } `json:"embeds"`
}

_ = DiscMessage{Embeds: []struct{
    Title       string `json:"title"`
    Description string `json:"description"`
    URL         string `json:"url"`
    Color       int    `json:"color"`
}{
    {"title1", "description1", "url1", 6545520},
}}

Как вы можете видеть, это может стать слишком многословным для любого здравомыслящего ума, и если вам придется выполнять инициализацию во многих других местах, это будет настоящим бременем.

Чтобы исправить это, вы можете объявить тип элемента среза, т.е. дать ему имя, чтобы он больше не был анонимным, и избавить себя от ненужного набора текста.

type DiscMessageEmbed struct {
    Title       string `json:"title"`
    Description string `json:"description"`
    URL         string `json:"url"`
    Color       int    `json:"color"`
}

type DiscMessage struct {
    Embeds []DiscMessageEmbed `json:"embeds"`
}

_ = DiscMessage{Embeds: []DiscMessageEmbed{{"title1", "description1", "url1", 6545520}}}
...