gpt4 book ai didi

jsonschema - 使用 json-schema 来要求或禁止基于另一个属性值的属性?

转载 作者:行者123 更新时间:2023-12-05 09:16:31 24 4
gpt4 key购买 nike

我试图在 json-schema 中完成的工作:当属性 enabledtrue 时,应该需要某些其他属性。当 false 时,应禁止使用这些属性。

这是我的 json 架构:

{
"type": "object",
"properties": {
"enabled": { "type": "boolean" }
},
"required" : ["enabled"],
"additionalProperties" : false,
"if": {
"properties": {
"enabled": true
}
},
"then": {
"properties": {
"description" : { "type" : "string" },
"count": { "type": "number" }
},
"required" : ["description", "count"]
}
}

使用 ajv 6.5 版进行验证,结果是需要 count 等,而不管 enabled 的值如何。例如,对于数据:

{ "enabled": false }

我的验证错误是:

[ { keyword: 'required',
dataPath: '',
schemaPath: '#/then/required',
params: { missingProperty: 'description' },
message: 'should have required property \'description\'' },
{ keyword: 'required',
dataPath: '',
schemaPath: '#/then/required',
params: { missingProperty: 'count' },
message: 'should have required property \'count\'' },
{ keyword: 'if',
dataPath: '',
schemaPath: '#/if',
params: { failingKeyword: 'then' },
message: 'should match "then" schema' } ]

如何使用 json-schema draft-7 完成此操作?

请注意,此问题与以下问题类似,但要求更严格:
jsonSchema attribute conditionally required .

最佳答案

试试这个模式:

{
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
],
"if": {
"properties": {
"enabled": {
"const": true
}
}
},
"then": {
"properties": {
"enabled": {
"type": "boolean"
},
"description": {
"type": "string"
},
"count": {
"type": "number"
},
"additionalProperties": false
},
"required": [
"description",
"count"
]
},
"else": {
"properties": {
"enabled": {
"type": "boolean"
}
},
"additionalProperties": false
}
}

如果您需要 "additionalProperties": false,您必须在 thenelse 中枚举所有属性。如果您可以接受额外的属性,架构可能会更简单:

{
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
],
"if": {
"properties": {
"enabled": {
"const": true
}
}
},
"then": {
"properties": {
"description": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"description",
"count"
]
}
}

我检查了 ajv cli .

有效:{"enabled": false}

无效:{"enabled": true}

有效:{"enabled": true, "description":"hi", "count":1}

关于jsonschema - 使用 json-schema 来要求或禁止基于另一个属性值的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com