在jsonschema中,我们如何根据外部存在的字段值来制作所需的一些内部属性。
在下面的示例中,
{
"type" : "a/b/c",
"args": {
"propA1": "",
"propA2": "",
"propB1": "",
"propC1": "",
"propC2": "",
"c1": "",
"c2": "",
"c3": ""
}
}
Run Code Online (Sandbox Code Playgroud)
type
可以是a
或b
或c
。args
总是需要的。
条件是,
propA1
,propA2
如果类型为a
,则为必填项propB1
如果类型为b
and,则为必填项,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"]
Run Code Online (Sandbox Code Playgroud)
这里我们如何指定内部属性所需的属性而不在每个对象中重复公共属性anyOf
?
小智 5
您需要像在主模式中使用它一样使用"properties"
内部。"anyOf"
因此,只需将两者都放入"type"
(使用适当的单值"enum"
,然后将“args”放入"required"
其中。您不需要重复 的其他内容"args"
。它应该看起来像这样(尽管我还没有测试过)。
"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": [{
"properties": {
"type": {"enum": ["a"]},
"args": {
"required": ["propA1", "propA2"]
}
}
}, {
"properties": {
"type": {"enum": ["b"]},
"args": {
"required": ["propB1"]
}
}
}, {
"properties": {
"type": {"enum": ["c"]},
"args": {
"required": ["propC1", "propC2"]
}
}
}]
},
"required": ["type", "args"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
965 次 |
最近记录: |