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等内的属性无需重复声明也可以被识别到。会便捷一些。

官方示例:

 

posted on 2023-08-21 01:23  mlllily  阅读(359)  评论(0编辑  收藏  举报