gpt4 book ai didi

jsonschema - 如何在不同的属性类型上使用 anyOf?

转载 作者:行者123 更新时间:2023-12-03 21:57:13 25 4
gpt4 key购买 nike

在下面的架构中,我需要 items_list , pricevariance作为必需的键。条件是 pricevariance可能为空,也可能不为空,但都不能为空。

虽然我能够实现它,但我很期待是否有更短的方法来做到这一点。另外,我不确定该放在哪里 requiredadditionalProperties键。

任何帮助是极大的赞赏。

{
"type": "object",
"properties": {
"items_list": {
"type": "array",
"items": {
"type": "string"
}
},
},
"anyOf": [
{
"properties": {
"price": {
"type": "number",
"minimum": 0,
},
"variance": {
"type": [
"number",
"null"
],
"minimum": 0,
},
},
},
{
"properties": {
"price": {
"type": [
"number",
"null"
],
"minimum": 0,
},
"variance": {
"type": "number",
"minimum": 0,
},
},
},
],
# "required": [
# "items_list",
# "price",
# "variance",
# ],
# "additionalProperties": False,
}

最佳答案

要回答“可以更短吗?”这个问题,答案是肯定的。一般的经验法则是永远不要在 bool 逻辑关键字中定义任何内容。仅使用 bool 逻辑关键字来添加复合约束。我使用术语“复合约束”来表示基于模式中多个值的约束。在这种情况下,复合约束是价格和方差不能都为空。

{
"type": "object",
"properties": {
"items_list": {
"type": "array",
"items": { "type": "string" }
},
"price": { "type": ["number", "null"], "minimum": 0 },
"variance": { "type": ["number", "null" ], "minimum": 0 }
},
"required": ["items_list", "price", "variance"],
"additionalProperties": false,
"allOf": [{ "$ref": "#/definitions/both-price-and-variance-cannot-be-null" }],
"definitions": {
"both-price-and-variance-cannot-be-null": {
"not": {
"properties": {
"price": { "type": "null" },
"variance": { "type": "null" }
},
"required": ["price", "variance"]
}
}
}
}

您不仅不必跳过箍来获得 additionalProperties正常工作,它也更容易阅读。它甚至符合您对问题的描述,“价格和方差可能为也可能不为空”( properties )但“两者都不能为空”( not (复合约束))。您可以通过内联定义使其更短,但我将其包含在内是为了展示该技术的表现力,同时仍然比原始模式更短。

关于jsonschema - 如何在不同的属性类型上使用 anyOf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61363906/

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