猿问

文件以 - 开头时进行 Yaml 解析

我正在尝试使用“gopkg.in/yaml.v3”包将 yaml 文件解析为 go。我无法解决的问题是解析以 - 开头的文件。例如:


---

- type: people

  info:

   - { name: John, last: Doe }

   ...

所以当我尝试解析这个


package main


import (

  "fmt"

  "io/ioutil"

  "log"

  

  "gopkg.in/yaml.v3"

)


type YamlFile struct {

  type string `yaml:"type"`

}


func main() {

        d := YamlFile{}


        src, err := ioutil.ReadFile("test1.yaml")

        if err != nil {

                log.Println(err)

        }


        err = yaml.Unmarshal(src, &d)

        if err != nil {

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

        }


        fmt.Println(d)

}


输出:error: yaml: unmarshal errors: line 2: cannot unmarshal !!seq into main.YamlFile


当 - 从文件中删除时,上面的代码有效


---

type: people

info:

   - { name: John, last: Doe }

...

但是我无法重新格式化文件,所以我需要知道我在尝试使用 - 进行解析时做错了什么。感谢您提供正确方向的任何指示。


胡子哥哥
浏览 188回答 1
1回答

子衿沉夜

-表示它是一个列表/数组。因此,您必须在 Go 中解组为切片或数组。更改d := YamlFile{}为d := []YamlFile{},您将不再收到该错误。但还要注意,您定义的结构总是会得到一个空结果,因为它没有导出字段。请尝试:type YamlFile struct {   Type string `yaml:"type"`   }在操场上看到它。
随时随地看视频慕课网APP

相关分类

Go
我要回答