如何编写JSON Schema校验数组内someKey字段值的唯一性
可以实现,以下是符合需求的具体实现方案:
可用JSON Schema代码
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["something01", "something02", "something03"], "properties": { "something01": { "type": "string" }, "something02": { "type": "string" }, "something03": { "type": "array", "items": { "type": "object", "required": ["someKey", "somethingElse"], "properties": { "someKey": { "type": "string" }, "somethingElse": { "type": "string" } } }, "uniqueItems": { "$data": "1/someKey" } } } }
规则说明
- 该Schema基于JSON Schema Draft 07规范编写,兼容绝大多数主流JSON校验工具
- 先约束了外层对象必须包含
something01、something02、something03三个字段,同时约束了something03数组下的每个元素必须包含someKey和somethingElse字段 - 核心判重逻辑通过
uniqueItems搭配$data引用实现:1/someKey为相对JSON指针,含义是取数组每个元素下someKey字段的值作为判重依据,只要存在任意两个元素的someKey值相同,校验就会失败。
校验效果
- 你提供的第一个合法样例,
someKey值无重复,可正常通过校验 - 后续两个存在
someKey重复值的样例,都会触发uniqueItems规则错误,被拦截无法通过校验。
注意事项
如果使用的校验工具默认未开启$data特性支持,需要手动开启配置:比如JavaScript生态的Ajv校验器,初始化时需要传入{ $data: true }参数。
内容的提问来源于stack exchange,提问作者Michael D O'Shea
相关产品推荐
相关产品推荐

