Python 3.x 无法使用Python和Cerberus验证重复值的列表

Python 3.x 无法使用Python和Cerberus验证重复值的列表,python-3.x,validation,json-schema-validator,cerberus,Python 3.x,Validation,Json Schema Validator,Cerberus,我对Python和Cerberus相当陌生。 我有一个要求,我需要验证任何空字符串或重复列表。以下是我所做的: import cerberus myschema = {'uid': {'type': 'list', 'schema': {'type': 'string', 'required' : True}}} cerberus.rules_set_registry.add('myschema', myschema) newval = Validator(myschema) test =

我对Python和Cerberus相当陌生。 我有一个要求,我需要验证任何空字符串或重复列表。以下是我所做的:

import cerberus

myschema = {'uid': {'type': 'list', 'schema': {'type': 'string', 'required' : True}}}

cerberus.rules_set_registry.add('myschema', myschema)
newval = Validator(myschema)

test = {'uid' : {'10000', '10001', '10002', '10003', '10004', '10005'}}
newval.validate(test)
由于某些原因,输出总是“False”。
或者,我尝试了“其中之一”的规则,并得出以下结论:

from cerberus import Validator
document = {'column_name' : ['BLAH', 'SEX', 'DOMAIN', 'DOMAIN']}

schema = {'column_name' : {'oneof' : [{'type': 'list', 'contains' : ['DOMAIN']}]} }
v = Validator(schema)
v.validate(document, schema)
上述情况总是正确的。我希望“其中之一”可以验证副本,而上述方法是正确的。 如果我错了,这里有人能纠正我吗
提前感谢,
尼克斯:好的
我找不到Cerberus validator的答案来检查列表中的重复项
我检查了Json模式,它非常简单。代码如下:

from jsonschema import validate

schema = { "type": "array", "uniqueItems": True}

mylist  = ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']

# Returns None if validated; else a validation error
validate(instance = mylist, schema = schema)
在Cerberus中,如果验证正确,则验证返回True;否则就错了。然而,如果对Json模式进行验证,则返回None(在Python中),抛出验证错误,如下所示:

---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
<ipython-input-1-efa3c7f0da39> in <module>
      5 mylist  = ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
      6 
----> 7 ans = validate(instance = mylist, schema = schema)
      8 if(ans == None): print('Validated as True')

~/Library/Python/3.8/lib/python/site-packages/jsonschema/validators.py in validate(instance, schema, cls, *args, **kwargs)
    932     error = exceptions.best_match(validator.iter_errors(instance))
    933     if error is not None:
--> 934         raise error
    935 
    936 

ValidationError: ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000'] has non-unique elements

Failed validating 'uniqueItems' in schema:
    {'type': 'array', 'uniqueItems': True}

On instance:
    ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
---------------------------------------------------------------------------
ValidationError回溯(最近一次调用上次)
在里面
5 mylist=['1000','1001','1010','1011','1100','1101','1110','1000']
6.
---->7 ans=validate(实例=mylist,模式=schema)
8如果(ans==无):打印('验证为真')
验证中的~/Library/Python/3.8/lib/Python/site-packages/jsonschema/validators.py(实例、模式、cls、*args、**kwargs)
932 error=异常。最佳匹配(validator.iter\u errors(实例))
933如果错误不是无:
-->934上升误差
935
936
ValidationError:['1000','1001','1010','1011','1100','1101','1110','1000']具有非唯一元素
验证架构中的“uniqueItems”失败:
{'type':'array','uniqueItems':True}
例如:
['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
好的
我找不到Cerberus validator的答案来检查列表中的重复项
我检查了Json模式,它非常简单。代码如下:

from jsonschema import validate

schema = { "type": "array", "uniqueItems": True}

mylist  = ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']

# Returns None if validated; else a validation error
validate(instance = mylist, schema = schema)
在Cerberus中,如果验证正确,则验证返回True;否则就错了。然而,如果对Json模式进行验证,则返回None(在Python中),抛出验证错误,如下所示:

---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
<ipython-input-1-efa3c7f0da39> in <module>
      5 mylist  = ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
      6 
----> 7 ans = validate(instance = mylist, schema = schema)
      8 if(ans == None): print('Validated as True')

~/Library/Python/3.8/lib/python/site-packages/jsonschema/validators.py in validate(instance, schema, cls, *args, **kwargs)
    932     error = exceptions.best_match(validator.iter_errors(instance))
    933     if error is not None:
--> 934         raise error
    935 
    936 

ValidationError: ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000'] has non-unique elements

Failed validating 'uniqueItems' in schema:
    {'type': 'array', 'uniqueItems': True}

On instance:
    ['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']
---------------------------------------------------------------------------
ValidationError回溯(最近一次调用上次)
在里面
5 mylist=['1000','1001','1010','1011','1100','1101','1110','1000']
6.
---->7 ans=validate(实例=mylist,模式=schema)
8如果(ans==无):打印('验证为真')
验证中的~/Library/Python/3.8/lib/Python/site-packages/jsonschema/validators.py(实例、模式、cls、*args、**kwargs)
932 error=异常。最佳匹配(validator.iter\u errors(实例))
933如果错误不是无:
-->934上升误差
935
936
ValidationError:['1000','1001','1010','1011','1100','1101','1110','1000']具有非唯一元素
验证架构中的“uniqueItems”失败:
{'type':'array','uniqueItems':True}
例如:
['1000', '1001', '1010', '1011', '1100', '1101', '1110', '1000']

test={'uid':{'10000','10001','10002','10003','10004','10005'}

这不是json中列表的有效表示形式。以下是

test={'uid':['10000','10001','10002','10003','10004','10005']}

这就是Cerberus返回false的原因。您可以使用
print(newval.errors)
打印该json对象的所有错误


对于
oneOf
,Cerberus将验证列表中的项目是否完全满足约束列表中提到的
oneOf
。它不检查元素之间的关系。

test={'uid':{'10000','10001','10002','10003','10004','10005'}

这不是json中列表的有效表示形式。以下是

test={'uid':['10000','10001','10002','10003','10004','10005']}

这就是Cerberus返回false的原因。您可以使用
print(newval.errors)
打印该json对象的所有错误

对于
oneOf
,Cerberus将验证列表中的项目是否完全满足约束列表中提到的
oneOf
。它不检查元素之间的关系