AJV 使用 JSONPath 字符串验证架构

AJV validate schema with JSONPath strings

我正在尝试创建一个 JSON 模式,该模式可以支持验证具有 属性 值的 JSON 对象,这些值可以是常规 JSON 类型或表示有效的字符串JSON路径表达式。

因此,例如,给定此架构:

{
  "$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)
  }
})

理想情况下,我希望能够检查给定的 属性 值是否是有效的 JSON 路径字符串,如果是,则批准它。否则让ajv运行自己验证

感谢您的帮助!

我不知道你是否可以阻止其他关键字运行。有多种方法可以将 JSON Schema 中的检查应用于同一位置,因此这可能非常困难,而且 ajv 可能不支持。

您可以将其构建到您的架构中。

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "properties": {
    "age": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "pattern": "REGEX FOR JSON PATH"
        }
      ]

    }
  }
}

您可以 de-duplicate 使用 definitions 的正则表达式并使用 $ref 引用它。