gpt4 book ai didi

具有一个强制性属性和至少另一个未键入的 json 模式检查

转载 作者:行者123 更新时间:2023-12-04 22:29:21 25 4
gpt4 key购买 nike

我在 json 中有这个对象,我想用 json 模式验证它

"reference": {
"lookup" : "opportunity",
"shortreference": 93671,
"guid": "4bb30c46-20ec-e511-9408-005056862bfb"
}

查找属性是强制性的,然后我至少需要,shortreference 或 guid 或两者。
{
"reference": {
"type": "object",
"description": "opportunity reference",
"properties": {
"lookup": {
"enum": [
"employee",
"opportunity",
"serviceline",
"account"
]
}
},
"anyOf": [
{
"properties": {
"shortreference": {
"type": "integer"
},
"guid": {
"type": "string"
}
}
}
],
"required": [
"lookup"
]
}
}

编辑
我使用以下架构解决了我的问题
{
"reference": {
"type": "object",
"required": [
"lookup"
],
"properties": {
"lookup": {
"type": "string",
"enum" : ["opportunity", "employee", "serviceline", "account"]
}
},
"anyOf": [
{
"properties": {
"shortreference": {
"type": "integer"
}
},
"required": [
"shortreference"
]
},
{
"properties": {
"crmguid": {
"type": "string"
}
},
"required": [
"crmguid"
]
},
{
"properties": {
"springim": {
"type": "integer"
}
},
"required": [
"springim"
]
}
]
}

但是当我有两个元素时,所有输入类型都不会被输入检查:
如果 "shortreference": "12345"(一个字符串而不是一个整数),一旦提供了参数 crmguid,就不会执行关于类型的检查。有没有办法强制它。 (我正在使用 AJV: https://github.com/epoberezkin/ajv)

最佳答案

anyOf一旦找到匹配的模式,就会停止验证。如果您将所有属性声明都拉入模式的根目录并且只有 required,它应该会按您的预期工作。在 anyOf模式。这样,所有属性都将进行类型检查和 anyOf当它找到至少一个所需的属性时,将停止验证。

{
"reference": {
"type": "object",
"required": ["lookup"],
"properties": {
"lookup": {
"type": "string",
"enum" : ["opportunity", "employee", "serviceline", "account"]
},
"shortreference": { "type": "integer" },
"crmguid": { "type": "string" },
"springim": { "type": "integer" }
},
"anyOf": [
{ "required": ["shortreference"] },
{ "required": ["crmguid"] },
{ "required": ["springim"] }
]
}
}

关于具有一个强制性属性和至少另一个未键入的 json 模式检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36865501/

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