我对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)
以上总是返回True。我希望"oneof"可以验证重复项,前面提到的是正确的方法。如果我错了,这里的任何人都能纠正我吗
提前感谢,
Nix
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将验证您在列表中的项目是否完全符合约束列表中提到的one
约束。它不检查元素之间的关系。
好的
我找不到Cerberus验证器的答案来检查列表中的重复项
我检查了Json Schema,它确实很容易。以下是代码:
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;else错误。然而,Json Schema返回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']