json模式以使用其动态密钥来验证属性值

问题描述

数据:

xlrd.biffh.XLRDError: Unsupported format,or corrupt file: Expected BOF record; found

模式:

{
  "dynamic_key_1": {
    "key1": "value1"
    "id": "dynamic_key_1"
  },"dynamic_key_2": {
    "key1": "value2"
    "id": "some_random"
  }
}

如何使用json模式验证{ "patternProperties": { "^[^{}\"/\\\\]+$": { "type": "object","required": [ "id" ],"properties": { "id": { "type": "string" // ... validate with key } } } } } 的值是否等于id

在上述情况下,key将通过而dynamic_key_1将通过测试。

解决方法

除非您事先知道所有可能的值,否则无法在JSON模式中执行此操作。您不能动态地将实例中的数据用作架构中的某种模板。

,

我确实找到了一种方法来做到这一点。使用 patternNames 正则表达式进行验证。

...
"propertyNames": {
    "pattern": "[A-Za-z][A-Za-z0-9_-]*$"
  },"patternProperties": {
      "^[^{}\"/\\\\]+$": {
        "type": "object","required": [
          "id"
        ],"properties": {
          "id": {
            "type": "string"
            // ... validate with key
          }
        }
     }
  }
...