【问题标题】:Parse YAML with structs使用结构解析 YAML
【发布时间】:2019-01-17 09:42:48
【问题描述】:

我创建了以下 YAML 文件来提供一些用户需要提供的配置:

Environments:
 sys1:
    models:
    - app-type: app1
      service-type: “fds"

    - app-type: app2
      service-type: “era”
 sys2:
    models:
    - app-type: app1
      service-type: “fds"

    - app-type: app2
      service-type: “era"

https://codebeautify.org/yaml-validator/cbb349ec

这里有:

  1. 一个环境(根)
  2. 环境包含 1..n sys
  3. 每个 sys 包含 1..n 个模型实例,其关键应用类型

现在我需要解析这个 YAML 文件,所以我尝试构建一个结构类型,例如:

type Environment struct {
    Environment [] sys
}

type sys struct{
    Models    []Properties
}

type Models struct{
    app-type     string      `yaml:"app-type"`
    service-type string      `yaml:"service-type"`
}

现在我尝试解析这个 YAML,我得到一个索引超出范围的错误。

我的问题是:

1. Do I model the YAML correctly?
2. Do I model the struct correctly?

这是代码:

func main() {
    y := Environments{}

    err := yaml.Unmarshal([]byte(data), &y)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("%+v\n", y)
}

数据是yaml.file

【问题讨论】:

  • 你的 Go 代码和 YAML 都无效,可以发一个MCVE吗?
  • @Adrian - 查看链接,yaml 确实有效
  • 链接中的 YAML 不是问题中的 YAML,Go 代码仍然无效。
  • @Adrian - 完成,请重新检查
  • Go 代码仍然无效。如果您对某些代码有疑问,请发布该代码。如果该代码太大而无法发布,请将其缩减为重现问题的最小可能代码(即最小、完整、可验证的示例),然后发布代码。您可能会发现这样做可以解决您自己的问题;如果没有,那么社区将有一个可以帮助您的工作示例。

标签: go yaml


【解决方案1】:

试试这个:

package main

import (
    "fmt"
    "log"

    "gopkg.in/yaml.v2"
)

type Message struct {
    Environments map[string]models `yaml:"Environments"`
}
type models map[string][]Model
type Model struct {
    AppType     string `yaml:"app-type"`
    ServiceType string `yaml:"service-type"`
}

func main() {
    data := []byte(`
Environments:
 sys1:
    models:
    - app-type: app1
      service-type: fds
    - app-type: app2
      service-type: era
 sys2:
    models:
    - app-type: app1
      service-type: fds
    - app-type: app2
      service-type: era
`)
    y := Message{}

    err := yaml.Unmarshal([]byte(data), &y)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("%+v\n", y)

}

【讨论】:

  • 非常感谢,这正是我需要的,最后一个问题,我构建这个 yaml 结构好吗?例如,解析yaml文件以获取环境sys1key=app2的模型后,我在RT中需要什么@
  • 另外,请在这里stackoverflow.com/questions/51803219/…帮忙看看,谢谢!
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 2015-12-06
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2020-07-18
相关资源
最近更新 更多