JSON 当且仅当嵌套对象中存在特定键时才需要模式条件
JSON Schema conditional required if and only if a specific key exists in nested object
我对 jsonschema 的问题是双重的:
给出
{
"foo": {"ar": {"a": "r"}},
"bar": ""
}
如何检查 "ar" 是否存在于 "foo" 中?
并且仅当 "ar" 存在于 "foo" 内时,我该如何做到 "bar" 必须存在于给定的 json 内?
我试过查看其他 SO 答案或 jsonschema 文档,但它们似乎只检查键是否具有特定值,而不是键是否存在而不考虑其值。 json嵌套对象的模式似乎只检查嵌套的最深层次,而不是中间的某个地方。
我想到了这个,但是没有用。
{
"definitions": {},
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://example.com/root.json",
"type": "object",
"properties": {
"foo": {
"type": "object"
},
"bar": {
"type": "string"
}
},
"required": [
"foo"
],
"if": {
"properties": {
"foo": {
"properties": {
"ar": {
"type": "object"
}
}
}
}
},
"then": {
"required": [
"bar"
]
}
}
要测试 属性 是否存在,请使用 required
关键字。
{
"properties": {
"foo": {
"required": ["ar"]
}
},
"required": ["foo"]
}
如果 /foo/ar
存在,此架构验证为真,否则验证为假。使用它代替您的 if
架构,您的条件应该按预期工作。
我对 jsonschema 的问题是双重的:
给出
{
"foo": {"ar": {"a": "r"}},
"bar": ""
}
如何检查 "ar" 是否存在于 "foo" 中?
并且仅当 "ar" 存在于 "foo" 内时,我该如何做到 "bar" 必须存在于给定的 json 内?
我试过查看其他 SO 答案或 jsonschema 文档,但它们似乎只检查键是否具有特定值,而不是键是否存在而不考虑其值。 json嵌套对象的模式似乎只检查嵌套的最深层次,而不是中间的某个地方。
我想到了这个,但是没有用。
{
"definitions": {},
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://example.com/root.json",
"type": "object",
"properties": {
"foo": {
"type": "object"
},
"bar": {
"type": "string"
}
},
"required": [
"foo"
],
"if": {
"properties": {
"foo": {
"properties": {
"ar": {
"type": "object"
}
}
}
}
},
"then": {
"required": [
"bar"
]
}
}
要测试 属性 是否存在,请使用 required
关键字。
{
"properties": {
"foo": {
"required": ["ar"]
}
},
"required": ["foo"]
}
如果 /foo/ar
存在,此架构验证为真,否则验证为假。使用它代替您的 if
架构,您的条件应该按预期工作。