go - 如何使用golang解析其中的yaml列表?
问题描述
示例 yaml 文件final-result.yml
:
- category: 1
rules:
- name: a
results:
- asset: b
advice: c
- category: 2
rules:
- name: d
results:
- asset: e
advice: f
我尝试打包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)
}
但它给出了一个空的结果:
[{ []} { []}]
解决方案
根据文档,您应该公开结构字段,以便解组正确填充数据。:
结构字段仅在导出时才解组(首字母大写)
更改类型定义后,您的代码按预期工作,如下所示:
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"`
}
推荐阅读
- java - 为什么我从数据库中获得的价值不公开?
- javascript - 如何使样式化的 ReacJs Header 组件具有粘性或固定在顶部?
- javascript - 从 JSON 对象中提取深层数据
- python - 如何在不使用函数 train_test_split 的情况下将数据拆分为测试和训练?
- vba - 在 VBA 中,无法从工作簿事件处理程序 Workbook_BeforeClose 或 Workbook_Deactivate() 调用工作表中的子例程
- mongoose - 如何添加更多字段来自动填充?
- blazor-server-side - Blazor 服务器端:如何在服务类中使用 ClaimsPrincipal
- reactjs - 在反应中通过多步形式的道具导入状态的正确方法是什么
- c - 需要帮助将元素从堆栈移动到队列(链表)
- vhdl - Quartus 的 RTL 查看器与查看 ROM 模块的问题