jsonschema:使用特定键验证字典列表

Joe*_*e J 0 validation json jsonschema kubernetes openapi

我正在尝试为字典列表(也称为对象数组)编写一个 jsonschema,在其中验证字典中的键。此示例中的标签是我感兴趣的。我想允许任意数量的标签,并希望验证namevalue字段始终存在于标签字典中。以下是表示为 yaml 的示例输入。

some_field1: "value_a"
some_field2: "value_b"
labels:
- name: "bar"
  value: "foo"
- name: "baz"
  value: "blah"
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止拼凑的内容,但它并没有验证字典中的键。我不确定 extraProperites 在这种情况下是如何工作的,但我在网上找到了一个例子。

properties:
  some_field1:
    type: string
    default: 'value_a'
  some_field2:
    type: string
    default: 'value_b'
  labels:
    type: array
    items:
      type: object
      additionalProperties:
        type: string
Run Code Online (Sandbox Code Playgroud)

我的用例是,我尝试为 Kubernetes 创建自定义资源定义 (CRD),在其中验证输入,我的理解是 CRD 使用 openapi3/jsonschema 验证来定义其字段。

我无法找到有关如何使用特定键验证字典列表的信息。如果您提供任何帮助,我将不胜感激。

Hel*_*len 6

字典的已知/固定键可以定义properties并包含在required列表中:

  labels:
    type: array
    items:
      type: object
      required: [name, value]
      properties:
        name:
          type: string
        value:
          type: string
      additionalProperties:
        type: string
Run Code Online (Sandbox Code Playgroud)