引用嵌套对象的通用定义

Refencing a common definitions for nested objects

让我试着解释一下我想做什么。我的 JSON 看起来像这样

My.json:

{
    "overrides": {
        "key1": {
            "DRM": {
                "queue": "q1",
                "resource": "r1m<0.5"
            }
        },
        "key2": {
            "DRM": {
                "queue": "q2",
                "resource": "r1m<0.4"
            }
        }
    }
}

我的架构:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "test-schema.json",
    "definitions": {
        "DRM": {
            "type": "object",
            "properties": {
                "queue": {
                    "type": "string"
                },
                "resource": {
                    "type": "string"
                }
            },
            "additionalProperties": false
        },
        "key-objs": {
            "type": "object",
            "properties": {
                "DRM": {
                    "$ref": "#/definitions/DRM"
                }
            },
            "additionalProperties": false
        }
    },
    "type": "object",
    "properties": {
        "overrides": {
            "type": "object",
            "properties": {
                "key1": {
                  "$ref": "#/definitions/key-objs"
                },
                "key2": {
                  "$ref": "#/definitions/key-objs"
                }
            }
        }
    }
}

我的问题是每次我在 overrides 中定义一个新的 key(例如:key3,key4),我需要更新我的模式,使其引用 key-objs.

我知道 overrides 对象可以变成一个列表,列表中的所有项目都可以定义 key-objs。但是我不想将 overrides 更改为列表。

有没有办法让我说 overrides 中的所有对象都应该引用 key-objs 而无需专门指定它?

您可以使用 "additionalProperties": {schemaComesHere}

指定未指定键的架构

因此,您可以不用一一定义属性,而是

  "overrides": {
      "type": "object",
      "additionalProperties": {
          "$ref": "#/definitions/key-objs"
      }
  }