Shu*_*Tao 1 yaml go unmarshalling
示例 yaml 文件final-result.yml:
- category: 1
rules:
- name: a
results:
- asset: b
advice: c
- category: 2
rules:
- name: d
results:
- asset: e
advice: f
Run Code Online (Sandbox Code Playgroud)
我尝试打包gopkg.in/yaml.v2解组:
package main
import (
"io/ioutil"
"log"
"gopkg.in/yaml.v2"
)
type FinalResult struct {
category string `yaml:"category"`
rules []RulesItem `yaml:"rules,flow"`
}
type RulesItem struct {
name string `yaml:"name"`
results []ResultsItem `yaml:"results,flow"`
}
type ResultsItem struct {
asset string `yaml:"asset"`
advice string `yaml:"advice"`
}
func main() {
var result []FinalResult
content, err := ioutil.ReadFile("final-result.yml")
if err != nil {
log.Fatal(err.Error())
return
}
err = yaml.Unmarshal(content, &result)
if err != nil {
log.Fatal("Failed to parse file ", err)
}
log.Println(result)
}
Run Code Online (Sandbox Code Playgroud)
但它给出了一个空结果:
[{ []} { []}]
根据文档,您应该将结构字段公开,以便解组正确填充数据。:
结构体字段仅在导出时才被解组(首字母大写)
更改类型定义后,您的代码将按预期工作,如下所示:
type FinalResult struct {
Category string `yaml:"category"`
Rules []RulesItem `yaml:"rules,flow"`
}
type RulesItem struct {
Name string `yaml:"name"`
Results []ResultsItem `yaml:"results,flow"`
}
type ResultsItem struct {
Asset string `yaml:"asset"`
Advice string `yaml:"advice"`
}
Run Code Online (Sandbox Code Playgroud)