作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用开源 Python 数据验证库 Cerberus验证字典的结构。我希望它获取部分无效的文档并在没有无效键的情况下输出它。
例如,对于这个脚本:
from cerberus import Validator
schema = {'name': {'type': 'string'},
'user_id': {'type': 'integer'}}
document = {'name': 'john doe', 'user_id': 'fdfdfd'}
v = Validator(schema)
v.validated(document)
这将返回 None
因为验证失败。
有没有办法获取只包含经过验证的字段的文档,如下所示:
{'name': 'john doe'}
最佳答案
这是比@jdoe 更安全的解决方案,因为 Validator.errors
属性的结构不一定与文档的结构相关。但是 document_error_tree
提供了这样的东西。
def remove_invalid_fields(document, errors_tree):
if errors_tree is None:
return document
filtered = {}
for field, value in document.items():
if field in errors_tree.descendants:
continue
if isinstance(value, Mapping):
value = remove_invalid_fields(value, errors_tree[field])
filtered[field] = value
return filtered
schema = {'name': {'type': 'string'},
'user_id': {'type': 'integer'}}
document = {'name': 'john doe', 'user_id': 'fdfdfd'}
validator = Validator(schema)
validator(document)
result = remove_invalid_fields(document, validator.document_error_tree)
assert result == {'name': 'john doe'}
它还会考虑子文档中的错误。
关于python - 如何从未通过 Cerberus 验证的文档中删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892522/
我是一名优秀的程序员,十分优秀!