我在python中寻找工具或示例来/如何验证字典
例如,我有dict:
test = {'foo' : 'bar', 'nested' : {'foo1' : 'bar1', 'foo2' : 'bar2'} }
现在我必须验证它。可以说,键foo
的值必须是布尔 False 或非空字符串。接下来,如果键foo1
的值为bar1
,则该键foo2
必须在范围1..10
中为int。我写了简单的函数来做到这一点,但这不是我想要的。是的,当然,我可以使用if..else
测试dict中的每个项目,但是如果dict有> 50个元素,那么它有点不舒服。
在Python中有没有好的工具/库?我不是在寻找解析器,只是快速和有效的方法来做到这一点。
答案 0 :(得分:27)
Voluptous是一个很好的工具,可以做到这一点 http://pypi.python.org/pypi/voluptuous
答案 1 :(得分:4)
您也可以尝试以下链接:
https://github.com/sunlightlabs/validictory
它是一个很好的包,有助于以更简单的方式验证
答案 2 :(得分:2)
我强烈建议Cerberus为其可读性或jsonschema,因为它使用JSON Schema标准
答案 3 :(得分:0)
Webster是一个pypi包,可以进行字典验证和值正则表达式验证。这可以让你确保字典中包含了它应该具有的所有键,并且值或多或少都是你所期望的。
答案 4 :(得分:0)
此dict-schema-validator软件包是验证python词典的一种非常简单的方法。
这是代表客户的简单架构:
{
"_id": "ObjectId",
"created": "date",
"is_active": "bool",
"fullname": "string",
"age": ["int", "null"],
"contact": {
"phone": "string",
"email": "string"
},
"cards": [{
"type": "string",
"expires": "date"
}]
}
验证:
from datetime import datetime
import json
from dict_schema_validator import validator
with open('models/customer.json', 'r') as j:
schema = json.loads(j.read())
customer = {
"_id": 123,
"created": datetime.now(),
"is_active": True,
"fullname": "Jorge York",
"age": 32,
"contact": {
"phone": "559-940-1435",
"email": "york@example.com",
"skype": "j.york123"
},
"cards": [
{"type": "visa", "expires": "12/2029"},
{"type": "visa"},
]
}
errors = validator.validate(schema, customer)
for err in errors:
print(err['msg'])
输出:
[*] "_id" has wrong type. Expected: "ObjectId", found: "int"
[+] Extra field: "contact.skype" having type: "str"
[*] "cards[0].expires" has wrong type. Expected: "date", found: "str"
[-] Missing field: "cards[1].expires"