【问题标题】:AJV validate schema with JSONPath stringsAJV 使用 JSONPath 字符串验证架构
【发布时间】:2019-11-19 13:27:12
【问题描述】:

我正在尝试创建一个 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 运行它自己的验证。

感谢您的帮助!

【问题讨论】:

    标签: node.js json jsonschema ajv


    【解决方案1】:

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

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

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

    您可以使用definitions 对正则表达式进行去重,并使用$ref 引用它。

    【讨论】:

    • 谢谢!我认为这最终是正确的做法。
    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2021-12-05
    • 2020-09-24
    • 2016-08-23
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多