Python 从JSON模式生成验证代码

Python 从JSON模式生成验证代码,python,python-3.x,jsonschema,Python,Python 3.x,Jsonschema,是否有一个现有的python包可以帮助我从json模式生成代码 例如,如果我有一个JSON对象,比如 { "attribute": "obj.value", "operator": "greater than", "value" : 235 } 我希望能够将此JSON作为规则应用于不同的对象,以查看哪些对象通过了规则 所以理想情况下,我想要 is_valid(obj,schema) 在哪里 返回True的操作就是根据有效的JS

是否有一个现有的python包可以帮助我从json模式生成代码

例如,如果我有一个JSON对象,比如

{       
    "attribute": "obj.value",      
    "operator":  "greater than",      
    "value" : 235 
}
我希望能够将此JSON作为规则应用于不同的对象,以查看哪些对象通过了规则

所以理想情况下,我想要

is_valid(obj,schema)
在哪里

返回True

的操作就是根据有效的JSON模式验证Python数据结构:

from jsonschema import validate

validate(obj, schema)
schema = {
    "type": "object",
    "properties": {
        "value": {
            "type": "integer",
            "minimum": 235,
            "exclusiveMinimum": True
        }
    }
}
如果架构有效,则返回
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模式:

from jsonschema import validate

validate(obj, schema)
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模式验证Python数据结构:

from jsonschema import validate

validate(obj, schema)
schema = {
    "type": "object",
    "properties": {
        "value": {
            "type": "integer",
            "minimum": 235,
            "exclusiveMinimum": True
        }
    }
}
如果架构有效,则返回
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模式:

from jsonschema import validate

validate(obj, schema)
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

阅读有关如何编写此类模式的精彩教程。

快速谷歌展示,它完全可以满足您的需求。您也可以使用它goal@EPo:这不是JSON模式库。它有同样的目标,但是模式是用Python定义的,而不是JSON。不要发明你自己的模式格式,坚持一个标准。一个快速的谷歌显示,这正是你想要的。你也可以使用相同的goal@EPo:这不是JSON模式库。它有同样的目标,但是模式是用Python定义的,而不是JSON。不要发明自己的模式格式,坚持一个标准。据我所知,jsonschema只关注类型,而我关注的是更复杂的东西,如{“属性”:“值”,“运算符”:“不在”,“值”:['a','b','c']}如果是,请纠正我wrong@Akshay:如果您的模式是有效的JSON模式,则
jsonschema.validate()
有效。文档包括使用
“items”:{“enum”:[1,2,3]}、
限制值等示例。@Akshay:我为示例对象添加了一个示例架构。@Akshay:对于排除子集(不在给定列表中)的特定示例,可以使用
“not”:{“enum”:[“a”,“b”,“c”}
,因此,JSON模式几乎肯定已经涵盖了您的用例。据我所知,jsonschema只关注类型,而我关注的是更复杂的东西,如{“属性”:“值”,“运算符”:“不在”,“值”:['a','b','c']}如果是,请纠正我wrong@Akshay:如果您的模式是有效的JSON模式,则
jsonschema.validate()
有效。文档包括使用
“items”:{“enum”:[1,2,3]}、
限制值等示例。@Akshay:我为示例对象添加了一个示例架构。@Akshay:对于排除子集(不在给定列表中)的特定示例,可以使用
“not”:{“enum”:[“a”,“b”,“c”}
,所以JSON模式几乎肯定已经涵盖了您的用例。