为嵌套对象重新定义通用定义

时间:2017-03-02 01:00:35

标签: json jsonschema

让我试着解释一下我想做什么。我的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"
                }
            }
        }
    }
}

我的问题是,每当我在key内定义新的overrides时(例如: key3,key4 ),我需要更新我的架构,让它引用{ {1}}。

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

有没有办法让我说overrides内的所有对象都应引用overrides而不是专门指定它?

1 个答案:

答案 0 :(得分:1)

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

指定未指定密钥的架构

因此,您可以执行

,而不是逐个定义属性
  "overrides": {
      "type": "object",
      "additionalProperties": {
          "$ref": "#/definitions/key-objs"
      }
  }