我正在尝试创建一个JSON模式,该模式可以支持使用属性值验证JSON对象,这些属性值可以是常规JSON类型或表示有效JSONpath表达式的字符串。
例如,给定以下架构:
{
"$schema": "http://json-schema.org/draft-07/schema",
"properties": {
"age": {
"type": "number"
}
}
}
这些JSON对象中的任何一个都可能有效:
{
"age": 30
}
{
"age" "$.age"
}
我一直试图添加一个名为jsonPath
的自定义关键字,就像这样:
{
"$schema": "http://json-schema.org/draft-07/schema",
"properties": {
"age": {
"type": "number",
"jsonPath": true
}
}
}
ajv.addKeyword('jsonPath', {
valid: true,
compile: () => data => {
return /^\$./.test(data)
}
})
理想情况下,我希望能够检查给定的属性值是否为有效的JSONPath字符串,如果是,请批准它。否则,让ajv运行它自己的验证。
感谢您的帮助!
答案 0 :(得分:1)
我不知道您是否可以阻止其他关键字运行。有多种方法可以将JSON模式中的检查应用于同一位置,因此这可能很困难,而且可能不是ajv支持的。
您可以将其构建到您的模式中。
{
"$schema": "http://json-schema.org/draft-07/schema",
"properties": {
"age": {
"anyOf": [
{
"type": "number"
},
{
"pattern": "REGEX FOR JSON PATH"
}
]
}
}
}
您可以使用definitions
并使用$ref
对其进行正则表达式重复数据删除。