如何编写定义复杂映射键的YAML Schema?
能否用YAML Schema定义复杂映射键的格式要求?
当然可以,但得用支持YAML复杂键约束的Schema规范——毕竟标准JSON Schema只认字符串键(因为JSON本身就不允许复杂键),没法直接处理YAML的高级特性。下面针对你给出的两个场景,分别给出可行的实现方案:
场景1:要求映射键必须是整数数组
通过Schema里的keys字段,就能指定键的格式:
type: mapping keys: type: sequence items: type: int values: type: str # 这里可以定义对应值的类型,比如字符串
验证规则很明确:
- 所有映射键必须是只包含整数的数组
- 像
- [2, 3]这种键能通过验证,- ["hello", "world"]就会被拒绝
场景2:要求映射键必须是带value字符串字段的对象
同样用keys字段约束键的结构:
type: mapping keys: type: mapping required: - value properties: value: type: str additionalProperties: false # 可选,如果要禁止键对象有其他额外字段就加上 values: type: str
对应的验证逻辑:
- 所有映射键必须是包含
value字段(且值为字符串)的对象 - 像
{value: "hello world"}这种键能通过验证,{hello: "world"}会被拒绝
补充说明
标准JSON Schema确实处理不了这类YAML专属的复杂键,但不少YAML验证工具(比如带自定义规则的yamllint、支持YAML扩展的jsonschema工具,或者专门的yaml-schema-validator)都支持这类扩展语法,能满足你的需求。
内容的提问来源于stack exchange,提问作者user7585848
相关产品推荐
相关产品推荐

