Unmarshal YAML Map嵌套列表

时间:2017-05-05 18:02:17

标签: go yaml

我试图为数据结构编写YAML,这是一个int和一个字符串列表。但是我在获取数据结构和YAML字符串时遇到了麻烦。例如

package main

import (
    "fmt"
    "log"

    yaml "gopkg.in/yaml.v2"
)

type ThingAndGroups struct {
    Groups []string
    Value  int
}

var someStr = `
thing1:
  Groups:
    - g1
    - g2
  Value:
    5
`

func main() {
    t := make(map[string]ThingAndGroups)

    err := yaml.Unmarshal([]byte(someStr), &t)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t:\n%v\n\n", t)
}

返回

  

map [thing1:{[] 0}]

如何让thing1成为字符串列表?

1 个答案:

答案 0 :(得分:2)

将您的类型更改为此

type ThingAndGroups struct {
    Groups []string `yaml:"Groups"`
    Value  int      `yaml:"Value"`
}

https://godoc.org/gopkg.in/yaml.v2#Marshal的文档中,它说

  

结构字段仅在导出时具有解组(具有大写的第一个字母),并且使用字段名称小写作为默认键进行解组。可以通过" yaml"定义自定义键。字段标记中的名称

或者,您可以更改yaml输入以使用value等小写字段,然后您就不需要指定自定义名称。