如何编写定义复杂映射键的 YAML 架构

问题描述 投票:0回答:1

与 JSON 不同,YAML 允许对象的键是任何内容,例如数组或对象。 (参考)

是否可以为 YAML 编写一个模式来定义键应该是什么样子?例如

mapping:
  # accepted: each key must be an array of ints
  ? - 2
    - 3
  : okay

  # not accepted
  ? - hello
    - world
  : not okay

mapping:
  # accepted: each key must be an object
  # with a field called "value", whose value is a string
  ? value: hello world
  : okay

  # not accepted
  ? hello: world
  : not okay

我熟悉编写 JSON 模式,只要目标 yaml 不使用任何此类“高级”功能,它也适用于 YAML。但我不知道这样的事情是否可能超出 JSON 范围。

yaml
1个回答
0
投票

是否可以为 YAML 编写一个模式来定义键应该是什么样子?

技术上是的,但并非每次实施都如此。

您可以根据 YAML 规范对 schema 的定义进行争论,静态类型语言中的实现(例如 Java 的 SnakeYAML、Go 的 go-yaml、Nim 的 NimYAML 等)使用它们反序列化为的本机类型作为架构。因此,如果您反序列化为,例如

Map<ComplexKey, Value>
,这将是一个通过类型
ComplexKey
定义键结构的模式。

但是,您的用例可能是不同的。例如,schema 的常见定义是“我可以使用命令行工具或编辑器插件验证 YAML 文件的结构定义”。如果这是您的用例,那么我在上一段中描述的内容对您来说毫无用处 - 因为您需要为要验证的每个模式编译一个基于该工具的工具。

© www.soinside.com 2019 - 2024. All rights reserved.