情况
使用Cerberus,我想通过从不需要任何未知键的级别中删除未知键来减少数据,以便进行验证。
但是,我在这样做时遇到了问题。这是一些示例数据和示例架构。
data = {
'data': {
'some_bool': True,
'some_string': 'some_string',
'some_int': 0,
'some_dict_with_some_unexpected_keys': {
'expected_key1': 'Thing1',
'expected_key2': 'path_to_thing',
'unexpected_key1': 'Surprise!'
}
}
}
example_schema = {
'data': {
'type': 'dict',
'schema': {},
'allow_unknown': {
'anyof': [
{'type': 'string'},
{'type': 'float'},
{'type': 'integer'},
{'type': 'boolean'},
{'type': 'dict',
'allow_unknown': False,
'schema': {
'expected_key1': {
'type': 'string',
'required': True
},
'expected_key2': {
'type': 'string',
'required': True
}
}
}
]
}
}
}
v = Validator()
v.schema = example_schema
print v.validate(data)
print v.normalized(data)
由于存在我想清除的意外密钥,显然此示例数据无法验证。当我手动将其删除时,它将验证。我尝试使用purge_unknown,但似乎无法将其识别为架构中的有效密钥。此外,v.normalized似乎会返回原始字典,但仍包含意外的密钥。
我尝试了FunkyFuture在这里提到的解决方案:How can I remove the fields from a document that failed validation with Cerberus?
但是,它会破坏我的整个数据结构,因为v.document_error_tree以
开头 {'data': [ValidationError @ 0x7f593f88c690 ( document_path=('data',)....
我将研究重新设计该解决方案以适合我的情况,但是肯定有一种更简单的方法!
简而言之
使用Cerberus清除未知密钥的最佳方法是什么?
*对不起缩进,对不起,stackoverflow代码块讨厌我。