为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用任意键解析 YAML

如何使用任意键解析 YAML

Go
小怪兽爱吃肉 2023-06-19 15:41:01
我正在尝试读取类似于我在 Python 中所做的 YAML 文件。但我不知道如何使用任意键。我有以下我想阅读的 YAML:apple:  name: item1banana:  name: item2我知道如何读取文件,但只使用空接口。我想将其作为我的 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[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) 的映射中?
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

为了按照您想要的方式解组,您应该提供说明。在您的情况下,如果您不想在地图中命名,请提供一个要解组的结构。


所以m := make(map[interface{}]interface{})应该改成m := make(map[string]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[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}]


查看完整回答
反对 回复 2023-06-19
?
三国纷争

TA贡献1804条经验 获得超7个赞

你应该使用m := make(map[string]Item).



查看完整回答
反对 回复 2023-06-19
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信