Могу ли я объявить поле в JSON-схеме как «JSON-схему»? - PullRequest
1 голос
/ 18 апреля 2019

Мой проект принимает «плагины».Эти плагины должны предоставлять специальный файл JSON, который содержит некоторую метаинформацию, а также описывает объекты событий с JSON Schema .Например:

{
    "name": "My component",
    "description": "My super awesome component",
    "documentation": "docs/main.md",
    "maintainer": "john.doe@example.com",
    "events": [{
        "name": "click",
        "description": "Occurs when the element is clicked.",
        "data": [{
                "name": "xPos",
                "description": "The horizontal position of the click.",
                "schema": {
                    "type": "integer",
                    "minimum": 0
                }
            }
        ]
    }]
}

Этот метафайл будет проверен на соответствие схеме JSON.Теперь мой вопрос: как я могу проверить содержимое записи events[0].data[0].schema?В этом случае ожидаемое поле является целым числом, но оно также может быть любого другого типа.Есть ли "type":"schema" или что-то подобное, определенное в схеме JSON?

(для чего я использую ajv в качестве валидатора.)

1 Ответ

0 голосов
/ 19 апреля 2019

Вы будете искать мета-схему! Схема JSON, которая описывает схему JSON.

Вы можете найти их по адресу http://json -schema.org /ification.html # meta-schemas

Вы хотите сослаться на мета-схему, используя $ id, вот так.

{
  "$ref": "http://json-schema.org/draft-07/schema#"
}

Используя приведенное выше в качестве схемы и приведенные ниже в качестве тестовых данных, которые вы хотите потерпеть неудачу, вы можете увидеть, как они работают, используя https://www.jsonschemavalidator.net

{
  "type": "integer",
  "minimum": 0,
  "properties": ["a"],
}

Однако вы должны учитывать, что валидация только утверждает ложь, потому что properties должен быть объектом. Разрешены и действительны неизвестные ключевые слова , как и пустой объект, или true или false, поэтому, если бы вы изменили properties на _properties в моем примере, ваша схема все равно была бы действителен в соответствии с мета-схемой.


Также актуально:

Если вы хотите вручную проверить правильность схемы, ajv позволяет вам сделать это легко! Документально подтверждено на https://ajv.js.org/#api-validateschema

.validateSchema(Object schema) -> Boolean

Проверяет схему. Этот метод должен использоваться для проверки схем вместо проверки из-за несоответствия формата URI в JSON Схема стандартная.

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

Если схема не имеет свойства $ schema, она проверяется на соответствие черновику 6 мета-схема (опция meta не должна быть ложной).

Если схема имеет свойство $ schema, тогда схема с этим идентификатором (то есть должен быть добавлен ранее) используется для проверки переданной схемы.

Ошибки будут доступны на ajv.errors.

...