如何为JSON Schema Draft-07定义受枚举约束的动态键?
JSON Schema Draft-07 约束对象键为枚举值的实现方案
要实现允许使用任意数量、属于指定枚举集合的未预定义键,可以结合propertyNames和additionalProperties关键字来定义模式,完全适配你给出的示例场景。
核心思路
- 用
propertyNames约束目标对象的所有键必须属于指定枚举集合["a", "b", "c"] - 用
additionalProperties定义每个键对应的值的格式(这里要求是数字数组) - 不通过
properties预定义具体键名,保留键的灵活性,只要符合枚举要求即可
完整Schema示例
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "letters": { "type": "object", "propertyNames": { "enum": ["a", "b", "c"] }, "additionalProperties": { "type": "array", "items": { "type": "number" } }, // 可选配置:如果要求letters至少包含一个键,添加以下行 "minProperties": 1 } }, // 可选配置:如果letters是必填字段,添加以下行 "required": ["letters"] }
校验效果说明
- 你提供的两个示例JSON都会顺利通过校验
- 若
letters中出现"d"这类不在枚举中的键,会触发校验失败 - 若某个键对应的值不是数字数组(比如字符串、单个数字),也会校验失败
内容的提问来源于stack exchange,提问作者Lemour
相关产品推荐
相关产品推荐

