AJV проверяет схему со строками JSONPath - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь создать схему 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 выполнит собственную проверку.

Спасибо за любую помощь!

1 Ответ

1 голос
/ 10 июля 2019

Не знаю, сможете ли вы запретить запуск других ключевых слов. Существует несколько способов применить проверки в схеме JSON к одному и тому же местоположению, поэтому это, вероятно, будет довольно сложно, и, вероятно, не будет поддерживаться ajv.

Вы можете встроить это в свою схему.

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

    }
  }
}

Вы можете дублировать регулярное выражение, используя definitions, и ссылаться на него, используя $ref.

...