Генерация кода проверки из схемы JSON - PullRequest
0 голосов
/ 31 августа 2018

Существует ли существующий пакет python, который может помочь мне сгенерировать код из схемы json?

Например, если у меня есть объект JSON, такой как

{       
    "attribute": "obj.value",      
    "operator":  "greater than",      
    "value" : 235 
}

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

Так что в идеале я хочу иметь что-то вроде

is_valid(obj,schema)

, где

is_valid({"value":300},{"attribute":"value","operator":"greater than","value":235}) 

возвращает True

1 Ответ

0 голосов
/ 31 августа 2018

Проект jsonschema делает именно это, проверяет структуры данных Python на соответствие действующей схеме JSON:

from jsonschema import validate

validate(obj, schema)

Возвращает None, когда схема действительна, и вызывает исключение, когда это не так. Если вы должны иметь логическое значение, используйте:

import jsonschema

def is_valid(obj, schema):
    try:
        jsonschema.validate(obj, schema)
    except jsonschema.ValidationError:
        return False
    else:
        return True

Вам необходимо использовать допустимые ограничения схемы JSON. Для целочисленных значений ограничивает диапазон , если ваше значение должно соответствовать границам, например.

Словарь {"value": 300} - это объект JSON с одним ключом, где этот единственный ключ является целым числом с нижней границей, поэтому определите его как схему JSON:

schema = {
    "type": "object",
    "properties": {
        "value": {
            "type": "integer",
            "minimum": 235,
            "exclusiveMinimum": True
        }
    }
}

Эта схема проверяет ваш пример значения:

>>> import jsonschema
>>> def is_valid(obj, schema):
...     try:
...         jsonschema.validate(obj, schema)
...     except jsonschema.ValidationError:
...         return False
...     else:
...         return True
...
>>> schema = {
...     "type": "object",
...     "properties": {
...         "value": {
...             "type": "integer",
...             "minimum": 235,
...             "exclusiveMinimum": True
...         }
...     }
... }
>>> is_valid({'value': 300}, schema)
True
>>> is_valid({'value': 1}, schema)
False

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

...