我对jsonschema的问题是双重的:
给予
{
"foo": {"ar": {"a": "r"}},
"bar": ""
}
如何检查键“ ar”是否在“ foo”内部?
并且仅当“ ar”存在于“ foo”内部时,如何才能使“ bar”必须存在于给定的json中?
我曾尝试查找其他SO答案或jsonschema文档,但它们似乎仅检查密钥是否具有特定值,而不是检查密钥是否存在而不管其值如何。而且,嵌套对象的jsonschema似乎只检查嵌套的最深层,而不是中间的某个地方。
我想出了这个,但是没用。
{
"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"
]
}
}
答案 0 :(得分:1)
要测试该属性是否存在,请使用required
关键字。
{
"properties": {
"foo": {
"required": ["ar"]
}
},
"required": ["foo"]
}
如果存在/foo/ar
,则此架构验证为true,否则为false。使用它代替您的if
模式,您的条件应该可以按预期工作。