如何使用任意键解析 YAML

我正在尝试读取类似于我在 Python 中所做的 YAML 文件。但我不知道如何使用任意键。我有以下我想阅读的 YAML:


apple:

  name: item1

banana:

  name: item2

我知道如何读取文件,但只使用空接口。我想将其作为我的 Item 类型的映射来读入。


package main


import (

    "fmt"

    "log"

    "gopkg.in/yaml.v2"

)


type Item struct {

    Name string `yaml:"name"`

}


func main() {

    input := `

  apple:

    name: item1

  banana:

    name: item2`


    m := make(map[interface{}]interface{})


    err := yaml.Unmarshal([]byte(input), &m)

    if err != nil {

        log.Fatalf("error: %v", err)

    }

    fmt.Printf("%v \n", m)

}

我在 Stdout 中得到了什么:


map[apple:map[name:item1] banana:map[name:item2]]

我想看到的是:


map[apple:{item1} banana:{item2}] 

如何将我的 YAML 文件读入 Item(s) 的映射中?


小怪兽爱吃肉
浏览 77回答 2
2回答

浮云间

为了按照您想要的方式解组,您应该提供说明。在您的情况下,如果您不想在地图中命名,请提供一个要解组的结构。所以m := make(map[interface{}]interface{})应该改成m := make(map[string]Item)package mainimport (    "fmt"    "log"    "gopkg.in/yaml.v2")type Item struct {    Name string `yaml:"name"`}func main() {    input := `  apple:    name: item1  banana:    name: item2`    m := make(map[string]Item)    err := yaml.Unmarshal([]byte(input), &m)    if err != nil {        log.Fatalf("error: %v", err)    }    fmt.Printf("%v \n", m)}输出:map[apple:{item1} banana:{item2}]

三国纷争

你应该使用m := make(map[string]Item).
打开App,查看更多内容
随时随地看视频慕课网APP