如何使golang打印JSON中的所有字段?

时间:2019-02-24 19:39:46

标签: json go

我仍在学习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 :(得分:3)

把水果放在篮子里。

预期输出与实际输出之间的区别在于,数组在预期输出中包装了一个对象。修改相应的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}, "", "  ")

答案 1 :(得分:1)

在您的printJSON函数中,您只是打印出水果篮的幻灯片。创建和打印篮子结构并向字段Basket添加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))
}