如何基于JSON Schema的properties数组实现动态属性校验?
动态JSON Schema验证需求
我有一个用于验证对象的Schema:
{ "required": ["description", "type", "properties", "element", "tests"], "additionalProperties": true, "type": "object", "definitions": { "primitive": { "type": ["string", "number", "boolean"] } }, "properties": { "error_message": { "$ref": "error_message.json" }, "description": { "$ref": "description.json" }, "tests": { "$ref": "tests.json" }, "type": { "type": "string", "enum": ["object"] }, "properties": { "type": "array", "items": { "type": "string" }, "uniqueItems": true }, "element": { "type": "string", "minLength": 1 } } }
需要实现动态验证规则:
- 输入对象中新增的所有属性必须与
properties数组中指定的属性完全匹配; properties数组中列出的所有属性必须全部存在于输入对象中。
示例
有效示例
{ description: "text", type: "object", element: "something", tests: { pass: [{ "name": "John", "age": 30, "gender": "male" }], fail: [{ "name": "Bo", "age": 17, "gender": "thing" }] }, properties: ["name", "age", "gender"], age: { range: { min: "1", max: "120"}}, gender: { enum: ["male", "female"] }, name: { range: { min: "3", max: "20" }} }
无效示例
缺少name属性
{ description: "text", type: "object", element: "something", tests: { pass: [{ "name": "John", "age": 30, "gender": "male" }], fail: [{ "name": "Bo", "age": 17, "gender": "thing" }] }, properties: ["name", "age", "gender"], age: { range: { min: "1", max: "120"}}, gender: { enum: ["male", "female"] } // 缺少name属性 }
存在多余的job属性
{ description: "text", type: "object", element: "something", tests: { pass: [{ "name": "John", "age": 30, "gender": "male" }], fail: [{ "name": "Bo", "age": 17, "gender": "thing" }] }, properties: ["name", "age", "gender"], age: { range: { min: "1", max: "120"}}, gender: { enum: ["male", "female"] }, // 多余的job属性 job: { range: { min: "3", max: "20" }} }
内容的提问来源于stack exchange,提问作者alireza nobakht
相关产品推荐
相关产品推荐

