Как заставить golang распечатать все поля в формате JSON? - PullRequest
0 голосов
/ 24 февраля 2019

Я все еще изучаю Go (из Python) и пытаюсь автоматизировать задачу в AWS.У меня есть это требование на работе, что мне нужно записать вывод JSON в файл, но я изо всех сил пытаюсь напечатать все поля в моей структуре.Я пропускаю поле Basket.

Я хочу, чтобы оно было напечатано так:

{
  "Basket": [
    {
      "Name": "Apple",
      "Color": "Red"
    },
    {
      "Name": "Banana",
      "Color": "Yellow"
    }
  ]
}

Но я получаю только это:

[
  {
    "Name": "Apple",
    "Color": "Red"
  },
  {
    "Name": "Banana",
    "Color": "Yellow"
  }
]

Вы можете найти мой код здесь Go Playground .

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

В функции printJSON вы просто распечатывали слайд с корзиной фруктов.Создание и печать структуры корзины и добавление тега JSON в поле «Корзина» позволяет получить то, что вы хотите:

https://play.golang.org/p/aJcbP97CDGt

type Basket struct {
    Fruits []Fruit `json:"Basket"`
}

// Prints the output in JSON format.
func printJSON() {
    dat, err := json.MarshalIndent(Basket{fruits}, "", "  ")

    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("This is printJSON().")
    fmt.Println(string(dat))
}
0 голосов
/ 24 февраля 2019

Положите фрукты в корзину.

Разница между ожидаемым и фактическим выходом заключается в том, что массив обернут объектом в ожидаемый результат.Измените соответствующие типы Go, чтобы они соответствовали структуре ожидаемого вывода.

var data = struct{ Basket []Fruit }{Basket: fruits}
dat, err := json.MarshalIndent(&data, "", "  ")

https://play.golang.org/p/7g9HDZ38XxU

В качестве альтернативы измените существующий тип Basket, чтобы он соответствовал JSON, и используйте это:

type Basket struct {
    Basket []Fruit
}

...

dat, err := json.MarshalIndent(&Basket{Basket:fruit}, "", "  ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...