当文件以 - 开头时 Go Yaml 解析
Go Yaml parse when file starts with -
我正在尝试使用“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 }
...
但是我无法重新格式化文件,所以我需要知道我在尝试使用 - 进行解析时做错了什么。感谢任何正确方向的指示。
-
表示是list/array。因此,您必须在 Go 中解组为切片或数组。
将 d := YamlFile{}
更改为 d := []YamlFile{}
,您将不会再收到该错误。
但还要注意,您定义的结构总是会得到一个空结果,因为它没有导出字段。
试试看:
type YamlFile struct {
Type string `yaml:"type"`
}
我正在尝试使用“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 }
...
但是我无法重新格式化文件,所以我需要知道我在尝试使用 - 进行解析时做错了什么。感谢任何正确方向的指示。
-
表示是list/array。因此,您必须在 Go 中解组为切片或数组。
将 d := YamlFile{}
更改为 d := []YamlFile{}
,您将不会再收到该错误。
但还要注意,您定义的结构总是会得到一个空结果,因为它没有导出字段。
试试看:
type YamlFile struct {
Type string `yaml:"type"`
}