json 项目数组的架构(在架构中前面引用过)
json schema for an array of items (referenced earlier in the schema)
我正在尝试为 json 文档提出一个架构,该文档在顶层是一个项目数组。每个项目都描述了一个 "git repo" 我们有一些映射。为什么会失败?
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://i.am.awesome.com",
"title": "title of the schema for our projects",
"description": "description of the schema for our projects",
"definitions": {
"proj": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"visibility": {
"type": "string",
"enum": [
"private",
"public"
]
},
"languages": {
"type": "array",
"minItems": 2,
}
},
"required": [
"name",
"visibility",
"languages",
]
}
},
"type": "array",
"items": {
"type": {
"$ref": "#/definitions/proj"
}
}
}
我正在使用 python 3.8 和 json 模式并得到这个错误
Failed validating 'anyOf' in metaschema['properties']['items']:
{'anyOf': [{'$ref': '#'}, {'$ref': '#/definitions/schemaArray'}],
'default': True}
On schema['items']:
{'type': {'$ref': '#/definitions/proj'}}
有趣的是,如果我不关心列表,并且正在检查单个元素的模式,只需
$ref": "#/definitions/proj
所以我的引用是正确的,只是不知道为什么它不适用于相同项目的列表。
$ref
应直接包含在 items
关键字中,而不应包含在 items.type
下。
type
是保留关键字,只能是字符串或数组,不能是对象。这会使您的模式无效。
这将是一个有效的模式(为了便于阅读省略了一些细节):
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"proj": {
"type": "object"
}
},
"type": "array",
"items": {
"$ref": "#/definitions/proj"
}
}
我正在尝试为 json 文档提出一个架构,该文档在顶层是一个项目数组。每个项目都描述了一个 "git repo" 我们有一些映射。为什么会失败?
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://i.am.awesome.com",
"title": "title of the schema for our projects",
"description": "description of the schema for our projects",
"definitions": {
"proj": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"visibility": {
"type": "string",
"enum": [
"private",
"public"
]
},
"languages": {
"type": "array",
"minItems": 2,
}
},
"required": [
"name",
"visibility",
"languages",
]
}
},
"type": "array",
"items": {
"type": {
"$ref": "#/definitions/proj"
}
}
}
我正在使用 python 3.8 和 json 模式并得到这个错误
Failed validating 'anyOf' in metaschema['properties']['items']:
{'anyOf': [{'$ref': '#'}, {'$ref': '#/definitions/schemaArray'}],
'default': True}
On schema['items']:
{'type': {'$ref': '#/definitions/proj'}}
有趣的是,如果我不关心列表,并且正在检查单个元素的模式,只需
$ref": "#/definitions/proj
所以我的引用是正确的,只是不知道为什么它不适用于相同项目的列表。
$ref
应直接包含在 items
关键字中,而不应包含在 items.type
下。
type
是保留关键字,只能是字符串或数组,不能是对象。这会使您的模式无效。
这将是一个有效的模式(为了便于阅读省略了一些细节):
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"proj": {
"type": "object"
}
},
"type": "array",
"items": {
"$ref": "#/definitions/proj"
}
}