JSONSchema 关键字 "type" 封装在 "items" 中时无法验证
JSONSchema keyword "type" when encased inside "items" fails to validate
我正在尝试编写一个 json 验证器来在运行前检查文件,但是使用“类型”时出现了一个非常奇怪的问题。
我知道“type”是一个保留字,但 json如果它没有值配对,Schema 就没有问题,正如我在另一个问题中发现的那样:Key values of 'key' and 'type' in json schema.
他们问题的解决方案是将 "type": { "type": "string"}
封装在“属性”中,它确实有效。但是,我的实现要求它位于数组中。这是我的代码片段:
{
"type": "object",
"additionalProperties": false,
"properties":{
"method":{
"type": "array",
"items":{
"type": {
"type": "string"
},
"name":{
"type": "string"
},
"provider": {
"type": "array"
}
}
}
}
}
奇怪的是,VScode 当它被隔离时在文件中没有问题,但当它包含在主代码中时,它不喜欢它并且没有产生解决方案。无论如何,用 python 验证它会产生:
...
raise exceptions.SchemaError.create_from(error)
jsonschema.exceptions.SchemaError: {'type': 'string'} is not valid under any of the given schemas
Failed validating 'anyOf' in metaschema['allOf'][1]['properties']['properties']['additionalProperties']['$dynamicRef']['allOf'][1]['properties']['items']['$dynamicRef']['allOf'][3]['properties']['type']:
{'anyOf': [{'$ref': '#/$defs/simpleTypes'},
{'items': {'$ref': '#/$defs/simpleTypes'},
'minItems': 1,
'type': 'array',
'uniqueItems': True}]}
On schema['properties']['method']['items']['type']:
{'type': 'string'}
更让我困惑的是 https://www.jsonschemavalidator.net/ 告诉我
Expected array or string for 'type', got StartObject. Path 'properties.method.items.type', line 8, position 17.
然而 JSON Schema Faker 能够毫无问题地生成假文件。当使用 python 和 JSONSchemaValidator.
验证时,生成的假 json 也 returns 同样的错误
我是初学者,非常感谢任何帮助或见解,感谢您抽出时间。
编辑:这是要求的输入数据片段。
{
...
"method": [
{
"type": "action",
"name": "name of the chaos experiment to use here",
"provider": [
]
}
}
]
}
数组没有属性;数组有项目。您包含的架构无效;你确定你不想拥有这个吗?
{
"type": "object",
"additionalProperties": false,
"properties":{
"method":{
"type": "array",
"items":{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name":{
"type": "string"
},
"provider": {
"type": "array"
}
}
}
}
}
}
我正在尝试编写一个 json 验证器来在运行前检查文件,但是使用“类型”时出现了一个非常奇怪的问题。
我知道“type”是一个保留字,但 json如果它没有值配对,Schema 就没有问题,正如我在另一个问题中发现的那样:Key values of 'key' and 'type' in json schema.
他们问题的解决方案是将 "type": { "type": "string"}
封装在“属性”中,它确实有效。但是,我的实现要求它位于数组中。这是我的代码片段:
{
"type": "object",
"additionalProperties": false,
"properties":{
"method":{
"type": "array",
"items":{
"type": {
"type": "string"
},
"name":{
"type": "string"
},
"provider": {
"type": "array"
}
}
}
}
}
奇怪的是,VScode 当它被隔离时在文件中没有问题,但当它包含在主代码中时,它不喜欢它并且没有产生解决方案。无论如何,用 python 验证它会产生:
...
raise exceptions.SchemaError.create_from(error)
jsonschema.exceptions.SchemaError: {'type': 'string'} is not valid under any of the given schemas
Failed validating 'anyOf' in metaschema['allOf'][1]['properties']['properties']['additionalProperties']['$dynamicRef']['allOf'][1]['properties']['items']['$dynamicRef']['allOf'][3]['properties']['type']:
{'anyOf': [{'$ref': '#/$defs/simpleTypes'},
{'items': {'$ref': '#/$defs/simpleTypes'},
'minItems': 1,
'type': 'array',
'uniqueItems': True}]}
On schema['properties']['method']['items']['type']:
{'type': 'string'}
更让我困惑的是 https://www.jsonschemavalidator.net/ 告诉我
Expected array or string for 'type', got StartObject. Path 'properties.method.items.type', line 8, position 17.
然而 JSON Schema Faker 能够毫无问题地生成假文件。当使用 python 和 JSONSchemaValidator.
我是初学者,非常感谢任何帮助或见解,感谢您抽出时间。
编辑:这是要求的输入数据片段。
{
...
"method": [
{
"type": "action",
"name": "name of the chaos experiment to use here",
"provider": [
]
}
}
]
}
数组没有属性;数组有项目。您包含的架构无效;你确定你不想拥有这个吗?
{
"type": "object",
"additionalProperties": false,
"properties":{
"method":{
"type": "array",
"items":{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name":{
"type": "string"
},
"provider": {
"type": "array"
}
}
}
}
}
}