如何在JSON Schema中复用数组?解决enum引用$defs报错问题
问题解答
能不能将数组放入Schema的$defs中?
可以,但不能直接存放原始数组。$defs内的每一项必须是合法的JSON Schema(即对象或布尔值类型),你直接放入字符串数组的做法不符合Schema的结构规范,这正是验证报错的原因。
如何在Schema中复用数组?
如果要复用一组枚举值,正确的做法是把数组包裹在合法的Schema对象里,再通过$ref引用这个Schema。示例如下:
$defs: nameEnumSchema: enum: ["n1", "n2", "n3"] properties: name: $ref: "#/$defs/nameEnumSchema"
如果需要在多个不同的Schema规则中复用该数组(比如同时用于enum和其他校验场景),可以借助$dynamicRef和$dynamicAnchor实现更灵活的复用,示例如下:
$defs: nameList: $dynamicAnchor: "names" enum: ["n1", "n2", "n3"] properties: name: $dynamicRef: "#/$defs/nameList" alias: $dynamicRef: "#names"
内容的提问来源于stack exchange,提问作者Ziyuan
相关产品推荐
相关产品推荐

