jsonschema 组合使用
allOf:
1. 必须满足allOf中全部的schema表达式,才算验证通过。
2. 使用场景: 在已有定义的schema上有些新的限制,那么可以使用allOf进行组合,就不用重复写已有部分 ; 有多个if条件时可以使用allOf进行组合 ; 既...又...条件下使用allOf组合 ; 等等
官方示例:
anyOf:
1. 满足anyOf中的一个或多个schema表达式,即可通过验证。
2. 使用场景:返回不固定,且至少满足其中一个时 (实际比较少用)
官方示例:
oneOf:
1. 只能满足oneOf中的一个schema表达式才算成功,满足0个或多个都失败。
2. 使用场景: 值可能有多种情况时,使用oneOf表达
官方示例:
not:
不满足所有的schema才算校验成功,官方示例:
if-then-else:
1. 如果if中的schema符合,那么then中的schema必须符合 ; 如果if中的schema不符合,那么else中的schema必须符合。
2. 特殊情况:如果if中的条件没有出现,then也会被执行: then没有或者符合schema都算校验成功。
if-then 与 allOf 结合:
如果需要多个if描述,那么需要用allOf把他们包装起来。
官方示例:
additionalProperties
1. 值可以为True or False,来表示是否允许未定义的属性。
官方示例:
2. 也可以限制除规定属性外其他属性值的类型。(目前还没遇到实际用过的场景)
官方示例:
3. 但是使用additionalProperties时,在使用allOf、oneOf、anyOf、if-then等组合语句时会有很多限制。
当把additionalProperties放在allOf中的schema时,allOf中其他schema和allOf外的schema属性并不会被计算在内。
当把additionalProperties放在allOf外时,allOf中的schema属性并不会被计算在内。
如果想实现最终想要的效果,那么把addtionalProperties放在allOf外 并且 需要把allOf中的属性在allOf外重复声明一遍
unevaluatedProperties
上面allOf和additionalProperties结合使用非常麻烦,在2019-09版本中新增加了unevautatedProperties:作用和additionalProperties一样,但是allOf等内的属性无需重复声明也可以被识别到。会便捷一些。
官方示例: