当前位置: 首页 > 面试题库 >

解析动态Yaml文件

楚雪松
2023-03-14
问题内容

我有一个yaml文件,当前写为:

    keys:
        - key: secret/dog
          values:
            - username: shiba
            - password: inu
        - key: secret/cat
          values:
            - dbhost: localhost
            - words: meow

但是,此yaml文件经常更改,因此每次可以使用不同的值添加新条目:

    keys:
        - key: secret/dog
          values:
            - username: shiba
            - password: inu
        - key: secret/cat
          values:
            - dbhost: localhost
            - words: meow
        - key: secret/mouse
          values:
            - color: white
        - key: secret/clouds
          values:
            - type: fluffy

我从使用gopkg.in/yaml.v2包开始就知道,如果所有值都相同,我可以解析yaml文件,例如:

            type Secrets struct {
                Keys []struct {
                    Key    string `json:"key"`
                    Values []struct {
                        Username string `json:"username"`
                        Password string `json:"password"`
                    } `json:"values"`
                } `json:"keys"`
            }

            func main() {

                var secret Secrets
                reader, err := os.Open("demo.yml")
                if err != nil {
                    log.Fatal(err)
                }
                buf, _ := ioutil.ReadAll(reader)
                yaml.Unmarshal(buf, &secret)

                fmt.Printf("%+v\n", secret.Keys[1].Key)

            }

在上面的示例中,它仅适用于密钥/狗密钥,而不适用于其他密钥。

当新值经常添加到yaml文件中时,如何在Go中html" target="_blank">执行此操作?

谢谢


问题答案:

如果您现在不精确的结构,则应该使您的结构看起来像这样

type Secrets struct {
    Keys []struct {
        Key    string `json:"key"`
        Values []map[string]string `json:"values"`
    } `json:"keys"`
}

它将解析整个yaml并获取所有值,但这将是一个数组,因此您将失去对对象的类型提示。另一种方法是提前终止https://blog.gopheracademy.com/advent-2016/advanced-
encoding-decoding/,
但是每次出现新的键/值对时,您都需要添加新对象。



 类似资料:
  • 这是我第一次使用YAML文件,所以我首先想到的是找到任何可以帮助我解析文件的库。 我找到了两个库,YamlBean和snakeyaml。我不确定我要用哪一个。 下面是我试图解析的文件的一个示例: 该文件将动态更改,所以我不知道该文件将包含多少用户或组。 有人能帮我开始吗?最好的图书馆是什么?YamlBean还是Snakeyaml? 我想,我需要将这些信息保存在一个可以轻松重复的东西中。

  • 问题内容: 这是我第一次使用YAML文件,因此我首先想到的是找到任何可以帮助我解析文件的库。 我发现了两个库YamlBean和SnakeYAML。我不确定我要使用哪一个。 这是我要解析的文件的示例: 该文件将动态更改,因此我不知道该文件将包含多少个用户或组。 我想从中获取的信息是用户名和类似的组: 并且仅从组中选择组名,如下所示: 有人可以让我从这里开始吗?最佳的库是什么?YamlBean或Sna

  • 问题内容: 我正在尝试使用Go解析YAML文件。问题在于YAML文件中的密钥可能并不总是相同。这是为了进行API版本控制,以便用户可以定义他们支持的版本。例如V1,V2,V3等。它们不需要按顺序排列,并且可以省略它们不支持的版本,例如V0,V2,V5等。 这是最高层,我还没有从结构内部弄清楚如何做到这一点。 问题答案: 首先,您尝试将根解析为,但其实际类型为。其次,如果要保留该类型结构,则需要一个

  • 我正在尝试使用 Go 解析 YAML 文件。问题是 YAML 文件中的键可能并不总是相同的。这是为了执行 API 版本控制,以便用户可以定义他们支持的版本。例如 V1、V2、V3 等。它们不需要按顺序排列,可以省略它们不支持的版本,即 V0、V2、V5 等。 我在这里看到一个类似的问题 这是顶层,我还没有完全弄清楚如何从结构内部执行此操作。

  • 问题内容: 如何在Python中解析YAML文件? 问题答案: 不依赖标头的最简单,最纯净的方法是(文档),可以通过以下方式安装: 就是这样。一个普通的函数也存在,但是除非你明确需要提供的任意对象序列化/反序列化,以避免引入执行任意代码的可能性,否则通常应首选该函数。

  • 问题内容: 我有一些用于处理YAML配置文件的代码,该文件有点失控,带有类型断言,我觉得必须有更好的方法来做到这一点。 这是我的配置文件中的相关代码段: 这是我的解析代码: 该代码按预期工作,但是这里有很多类型断言,我无法撼动自己缺少更好的方法的感觉。 正如配置所暗示的那样,可能要注意的一个关键项目是Caddy风格的插件系统的配置,因此主配置解析器无法提前知道插件配置的外观。它必须将对配置文件的插