从JSON模式生成验证代码

时间:2018-08-31 11:51:45

标签: python python-3.x jsonschema

是否存在可以帮助我从json模式生成代码的python软件包?

例如,如果我有

这样的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 :(得分:3)

jsonschema project正是这样做的,针对有效的JSON模式验证Python数据结构:

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模式约束。对于整数值,例如,如果您的值需要遵守边界,则为limit the range

字典{"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

请阅读Understanding JSON Schema,以获取有关如何编写此类架构的出色教程。