【问题标题】:Failed to unmarshal nested yaml无法解组嵌套的 yaml
【发布时间】:2020-02-14 08:21:31
【问题描述】:

Yaml 输入:

Tasks:
 - task: 
    name: 123
    retry: 5
    next: 123
 - task: 
    name: 123
    retry: 5
    next: 123

代码:

package main

import (
    "fmt"
    "io/ioutil"
    "os"

    "gopkg.in/yaml.v2"
)

type Tasks []struct {
    Task Task `yaml:"task"`
}

type Task struct {
    Name  string `yaml:"name"`
    Retry int    `yaml:"retry"`
    Next  string `yaml:"next"`
}

func main() {
    var w Tasks
    wfyaml, _ := os.Open(".yaml")
    byteValue, _ := ioutil.ReadAll(wfyaml)
    yaml.Unmarshal(byteValue, &w)
    fmt.Printf("%+v\n", w)
}

输出:[]

我无法弄清楚问题的原因。我已经检查过了。

【问题讨论】:

    标签: go yaml


    【解决方案1】:

    您错过了结构 (playground) 中的顶层 (Tasks):

    package main
    
    import (
        "fmt"
    
        "gopkg.in/yaml.v2"
    )
    
    const yamlStr = `Tasks:
     - task: 
        name: 123
        retry: 5
        next: 123
     - task: 
        name: 123
        retry: 5
        next: 123`
    
    type File struct {
        Tasks Tasks `yaml:"Tasks"`
    }
    
    type Tasks []struct {
        Task Task `yaml:"task"`
    }
    
    type Task struct {
        Name  string `yaml:"name"`
        Retry int    `yaml:"retry"`
        Next  string `yaml:"next"`
    }
    
    func main() {
        var w File
        yaml.Unmarshal([]byte(yamlStr), &w)
        fmt.Printf("%+v\n", w)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 2021-12-18
      • 2017-04-03
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多