从 JSON 架构生成验证代码



是否有现有的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

jsonschema项目正是这样做的,根据有效的 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 架构约束。例如,对于整数值,如果您的值需要遵守边界,请限制范围。

字典{"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 架构,了解如何编写此类架构的精彩教程。

最新更新