引用嵌套对象的通用定义
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"
}
}
让我试着解释一下我想做什么。我的 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"
}
}