在jsonschema中,我们如何根据外部的字段值创建所需的一些内部属性。
在以下示例中,
#X
{
"type" : "a/b/c",
"args": {
"propA1": "",
"propA2": "",
"propB1": "",
"propC1": "",
"propC2": "",
"c1": "",
"c2": "",
"c3": ""
}
}
可以是type
或a
或b
。总是需要c
。
条件是,
args
,如果类型为propA1
,propA2
如果类型为a
和,则需要propB1
b
,如果类型为propC1
,则需要propC2
。 c
,c1
和c2
到目前为止,我所做的是,
c3
这里我们如何指定内部属性所需而不重复"properties": {
"type": {"enum": ["a", "b", "c"]},
"args": {
"type": "object",
"properties": {
"propA1": {"type":"string" },
"propA2": {"type":"string" },
"propB1": {"type":"string" },
"propC1": {"type":"string" },
"propC2": {"type":"string" },
"c1": {"type":"string" },
"c2": {"type":"string" },
"c3": {"type":"string" }
}
"required": ["c1", "c2", "c3"]
}
"anyOf": [{
"type": {"enum": ["a"]}
// how to specify required for inner properties of args?
}, {
"type": {"enum": ["b"]}
}, {
"type": {"enum": ["c"]}
}]
},
"required": ["type", "args"]
的每个对象中的公共属性?
答案 0 :(得分:3)
您需要在"properties"
内使用"anyOf"
,方法与在主模式中使用它的方式相同。因此,只需将"type"
(包含相应的单值"enum"
,然后将“args”与其中的相应"required"
放在一起。您无需重复{{1}的其他内容1}}。看起来应该是这样的(虽然我还没有测试过)。
"args"