首页 > 解决方案 > 无法使用 gopkg.in/yaml.v2 解组具有缩进或空值的 yaml 文件

问题描述

我有以下 YML 文件称为test.yml

user_name:Agent1
org_info:
  first:hello
  second:world

我尝试test.yml使用以下 golang 代码解组

package main

import (
  "log"
  "io/ioutil"
  "gopkg.in/yaml.v2"
)

func main() {

  content, _ := ioutil.ReadFile("./test.yml")
  var t interface{}
  yaml.Unmarshal(content, &t)
  log.Println(t)
}

但是log.Println(t)nil. 我将test.yml文件缩减为:

user_name:Agent1
org_info:

但是log.Println(t)还是给了nil

如何使用 golang 解组具有不可预测模式的 yaml 文件,其中的字段没有值或导致嵌套和缩进子字段的字段?

还是我应该使用另一个 golang yaml 解析器?

标签: goyaml

解决方案


yaml.Unmarshal()返回错误:

yaml:第 2 行:在此上下文中不允许映射值

永远不要跳过错误检查:

var t interface{}
err = yaml.Unmarshal(content, &t)
if err != nil {
    log.Fatal(err)
}

在冒号后添加缺少的空格应该,使它们成为 YAML 值指示符:

user_name: Agent1
org_info:
  first: hello
  second: world

推荐阅读