gpt4 book ai didi

properties - 需要和/或有条件需要的属性的 jsonschema 验证

转载 作者:行者123 更新时间:2023-12-04 16:08:53 27 4
gpt4 key购买 nike

我需要验证一个始终具有 2 个属性的 json 对象:

  • 输入
  • 姓名

类型可以是“A”、“B”或“C”,

当类型为“A”时,属性“foo”也是必需的,并且不允许其他属性。

确定:

{
"type": "A",
"name": "a",
"foo": "a",
}

不正常:

{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}

当类型为“B”时,属性“bar”是必需的,不允许附加属性。

当类型为“C”时,属性“bar”是必需的,并且可选地也可以存在“zen”属性。

确定:

{
"type": "C",
"name": "a",
"bar": "a",
"zen": "a"
}

{
"type": "C",
"name": "a",
"bar": "a",
}

不正常:

{
"type": "C",
"name": "a",
"bar": "a",
"lol": "a"
}

不幸的是,这个 question 的出色答案部分涵盖了我的案例,但是我没有设法构建适合我的 jsonschema。

编辑:

这是我尝试过的。

{
"$schema": "http://json-schema.org/draft-04/schema",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["A", "B", "C"]
},
"name": {"type": "string"},
"foo": {"type": "string"},
"bar": {"type": "string"},
"zen": {"type": "string"},
},
"anyOf": [
{
"properties": {"type": {"enum": ["A"]}},
"required": ["foo"],
},
{
"properties": {"type": {"enum": ["B"]}},
"required": ["bar"],
},
{
"properties": {"type": {"enum": ["C"]}},
"required": ["bar"],
},
]
}

我的问题是,在“anyOf”中的对象内将字段“additionalProperties”设置为 false 并没有给我预期的结果。

例如下面的 json 尽管有额外的属性“lol”但通过了验证

{
"type": "A",
"name": "a",
"foo": "a",
"lol": "a"
}

最佳答案

JSON Schema 是一个约束系统,其中每个子模式的约束分别进行评估。这意味着“additionalProperties”只能“看到”同一直接模式对象中的“属性”或“patternProperties”。

此外,它不能“查看”基于“必需”的属性,只能“查看”“属性”和“模式属性”。

据我所知,如果您在 anyOf 的 each 分支内设置 "additionalProperties": false,则这些都不应该起作用,因为唯一允许的属性是 "type"。如果您这样做并且它允许除“类型”之外的属性,那么我想知道您使用的是什么实现。

关于properties - 需要和/或有条件需要的属性的 jsonschema 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649066/

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