схема json для проверки значения свойства с помощью его динамического ключа

#jsonschema #json-schema-validator #ajv

#jsonschema #json-schema-validator #ajv

Вопрос:

данные:

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

схема:

 {
    "patternProperties": {
      "^[^{}"/\\] $": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
            // ... validate with key
          }
        }
     }
  }
}
  

Как проверить id значение, равное ему key , используя схему json.

В приведенном выше случае dynamic_key_1 тест пройдет и dynamic_key_2 не пройдет тест.

Ответ №1:

Это невозможно сделать в схеме JSON, если вы заранее не знаете все возможные значения. Вы не можете динамически использовать данные из экземпляра в качестве своего рода шаблона в схеме.

Ответ №2:

Я нашел способ сделать это. patternNames Для проверки используется регулярное выражение.

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