属性 尚未定义,架构不允许附加属性
Property has not been defined and the schema does not allow additional properties
我在尝试验证架构时遇到以下错误 - v7 草案。感谢您帮助解决此错误。
我正在尝试根据 header 中的条件枚举值构建架构。属性 'salary' 类型需要根据在 header.
中选择的条件而变化
错误
属性 'salary' 尚未定义,架构不允许附加属性。
JSON 架构
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"EmployeeHeader": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"empType": {
"type": "string",
"enum": [
"FULLTIME",
"CONTRACT"
]
}
},
"required": [
"empType"
]
},
"EmployeeDetail": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"workInfo": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"jobtitle": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"jobtitle"
],
"additionalProperties": false
}
},
"required": [
"workInfo"
],
"additionalProperties": false
},
"minItems": 1
}
},
"if": {
"properties": {
"EmployeeHeader": {
"properties": {
"empType": {
"const": "FULLTIME"
}
}
}
}
},
"then": {
"properties": {
"EmployeeDetail": {
"items": {
"properties": {
"workInfo": {
"properties": {
"salary": {
"type": "object",
"properties": {
"regular": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"exclusiveMaximum": false,
"multipleOf": 0.01
},
"bonus": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"exclusiveMaximum": false,
"multipleOf": 0.01
}
}
}
}
}
}
}
}
}
},
"else": {
"properties": {
"EmployeeDetail": {
"items": {
"properties": {
"workInfo": {
"properties": {
"salary": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"exclusiveMaximum": false,
"multipleOf": 0.01
}
}
}
}
}
}
}
},
"required": [
"EmployeeHeader",
"EmployeeDetail"
],
"additionalProperties": false
}
有效负载示例
{
"EmployeeHeader": {
"empType": "FULLTIME"
},
"EmployeeDetail": [
{
"workInfo": {
"jobtitle": "Software Engineer",
"salary": {
"regular": 4000,
"bonus": 5000
}
}
}
]
}
问题
additionalProperties
关键字仅考虑在它出现的直接子模式中定义的 properties
和 patternProperties
。由于您仅在 then
和 else
关键字中定义了“薪水”属性,因此它被视为非法附加 属性.
解决方案
已经在子模式的 properties
中引入了“薪水”属性,其中还定义了 additionalProperties: false
。至少作为简单的布尔模式 true
。
在其他情况下,也可以包括出现在 then
和 else
关键字中的所有常见属性以减少重复,但在您的特定情况下,这几乎不是一个选项。
补充说明
一般来说,if
/then
/else
应该只用于附加约束(例如 minimum
/maximum
/required
) 但不要引入全新的 properties
尤其是在使用 patternProperties
或 additionalProperties
.
时
我在尝试验证架构时遇到以下错误 - v7 草案。感谢您帮助解决此错误。
我正在尝试根据 header 中的条件枚举值构建架构。属性 'salary' 类型需要根据在 header.
中选择的条件而变化错误
属性 'salary' 尚未定义,架构不允许附加属性。
JSON 架构
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"EmployeeHeader": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"empType": {
"type": "string",
"enum": [
"FULLTIME",
"CONTRACT"
]
}
},
"required": [
"empType"
]
},
"EmployeeDetail": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"workInfo": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"jobtitle": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"jobtitle"
],
"additionalProperties": false
}
},
"required": [
"workInfo"
],
"additionalProperties": false
},
"minItems": 1
}
},
"if": {
"properties": {
"EmployeeHeader": {
"properties": {
"empType": {
"const": "FULLTIME"
}
}
}
}
},
"then": {
"properties": {
"EmployeeDetail": {
"items": {
"properties": {
"workInfo": {
"properties": {
"salary": {
"type": "object",
"properties": {
"regular": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"exclusiveMaximum": false,
"multipleOf": 0.01
},
"bonus": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"exclusiveMaximum": false,
"multipleOf": 0.01
}
}
}
}
}
}
}
}
}
},
"else": {
"properties": {
"EmployeeDetail": {
"items": {
"properties": {
"workInfo": {
"properties": {
"salary": {
"type": "number",
"minimum": 0,
"maximum": 1000000,
"exclusiveMaximum": false,
"multipleOf": 0.01
}
}
}
}
}
}
}
},
"required": [
"EmployeeHeader",
"EmployeeDetail"
],
"additionalProperties": false
}
有效负载示例
{
"EmployeeHeader": {
"empType": "FULLTIME"
},
"EmployeeDetail": [
{
"workInfo": {
"jobtitle": "Software Engineer",
"salary": {
"regular": 4000,
"bonus": 5000
}
}
}
]
}
问题
additionalProperties
关键字仅考虑在它出现的直接子模式中定义的 properties
和 patternProperties
。由于您仅在 then
和 else
关键字中定义了“薪水”属性,因此它被视为非法附加 属性.
解决方案
已经在子模式的 properties
中引入了“薪水”属性,其中还定义了 additionalProperties: false
。至少作为简单的布尔模式 true
。
在其他情况下,也可以包括出现在 then
和 else
关键字中的所有常见属性以减少重复,但在您的特定情况下,这几乎不是一个选项。
补充说明
一般来说,if
/then
/else
应该只用于附加约束(例如 minimum
/maximum
/required
) 但不要引入全新的 properties
尤其是在使用 patternProperties
或 additionalProperties
.