动态属性的json模式,根据“类型”而变化

时间:2014-11-18 04:50:06

标签: json jsonschema

我正在尝试构建一个代表以下资源的json架构:

X resource:
{
  "type" : "{some enum of types}",
  <some list of properties that depend on the enum>
}

以下是一些(不是真实的)示例:

{
  "type" : "car",
  "color" : "red",
  "style" : "van"
}

{
  "type" : "plane",
  "color" : "white",
  "aisle" : "double"
}

如您所见,aisle属性仅在typeplane时适用,而style属性仅在type为{时适用{1}}。属性car很常见。

我能够得到这样的东西:

color

但这仅适用于X schema: { "$schema" : ... ... "properties" : { "type" : {...}, "color" : {...}. "sub_properties" : { "type" : "object", "oneOf" : [ ... ] } } } 的{​​{1}}属性。也就是说,以下是json:

sub_properties

我无法弄清楚如何解除&#34; X以便它直接应用于{ "type" : "car", "color" : "red", "sub_properties" : { "style" : "van" } } 的属性。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

从你的文字我可以理解两件事:

  • 如果您有一个枚举,并且想要定义限制枚举值的类型,那么您唯一的选择是使用枚举属性,并使用它来按值选择模式。 as it is explained here

  • 如果您只想为X设置替代模式,可以直接定义:

    &#34; X Schema&#34;:{&#34; oneOf&#34;:[{&#34; id&#34;:&#34; schema1&#34;},{&#34; id& #34;:&#34; SCHEMA2&#34;}]}