Как проверить правильность файла схемы JSON? - PullRequest
0 голосов
/ 13 января 2020

У меня есть файл JSON Schema , подобный этому, который содержит несколько намеренных ошибок:

{
    "$schema": "http://json-schema.org/schema#",
    "type": "object",
    "description": "MWE for JSON Schema Validation",
    "properties": {
      "valid_prop": {
        "type": ["string", "number"],
        "description": "This can be either a string or a number."
      },
      "invalid_prop": {
        // NOTE: "type:" here should have been "type" (without the colon)
        "type:": ["string", "null"],
        "description": "Note the extra colon in the name of the type property above"
      }
    },
    // NOTE: Reference to a non-existent property
    "required": ["valid_prop", "nonexistent_prop"]
}

Я хотел бы написать скрипт Python ( или, что еще лучше, установите CLI с PiP), который может найти эти ошибки.

Я видел этот ответ , который предлагает сделать следующее (изменено для моего варианта использования):

import json
from jsonschema import Draft4Validator

with open('./my-schema.json') as schemaf:
    schema = json.loads('\n'.join(schemaf.readlines()))
    Draft4Validator.check_schema(my_schema)
    print("OK!") # on invalid schema we don't get here

, но приведенный выше скрипт не обнаруживает ни одной из ошибок в файле схемы. Я бы заподозрил, что он обнаружит по крайней мере лишнее двоеточие в свойстве "type:".

Я неправильно использую библиотеку? Как мне написать скрипт проверки, который обнаружит эту ошибку?

1 Ответ

0 голосов
/ 14 января 2020

Вы говорите, что схема недопустима, но это не относится к приведенному вами примеру.

Неизвестные ключевые слова игнорируются. Это позволяет создавать расширения. Если бы неизвестные ключевые слова были предотвращены, у нас не было бы экосистемы расширений, созданных различными людьми и группами, таких как генерация форм.

Вы говорите, что значение в required является «ссылкой на существующая собственность ". Ключевое слово required не имеет ссылки на ключевое слово properties.

required определяет, какие ключи должен иметь объект.

properties определяет способ применения подсхемы к значениям. в объекте.

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

С точки зрения проверки правильности схемы можно использовать мета-схему схемы JSON.

С точки зрения проверка дополнительных вещей, которые вы считаете нежелательными, это ваше дело, учитывая, что приведенные вами примеры действительны.

В некоторых библиотеках может быть предусмотрена проверка работоспособности, но такая проверка вряд ли подойдет для примеров, которые вы предоставили, так как они не являются ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...