jsonSchema有条件地需要嵌套属性

时间:2018-01-31 08:11:42

标签: jsonschema

在jsonschema中,我们如何根据外部的字段值创建所需的一些内部属性。

在以下示例中,

#X

{ "type" : "a/b/c", "args": { "propA1": "", "propA2": "", "propB1": "", "propC1": "", "propC2": "", "c1": "", "c2": "", "c3": "" } } 可以是typeab。总是需要c

条件是,

  • args,如果类型为propA1
  • ,则需要propA2 如果类型为a和,则需要
  • propB1
  • b,如果类型为propC1,则需要propC2
始终需要

cc1c2

到目前为止,我所做的是,

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"] 的每个对象中的公共属性?

1 个答案:

答案 0 :(得分:3)

您需要在"properties"内使用"anyOf",方法与在主模式中使用它的方式相同。因此,只需将"type"(包含相应的单值"enum",然后将“args”与其中的相应"required"放在一起。您无需重复{{1}的其他内容1}}。看起来应该是这样的(虽然我还没有测试过)。

"args"