Python 如何根据特定属性的值以不同方式验证JSON数据的子集?
我正在使用Django Rest框架。我有一个获取JSON数据的API。我有一个列表序列化程序,试图验证父JSON中的列表。列表如下所示:Python 如何根据特定属性的值以不同方式验证JSON数据的子集?,python,json,django,serialization,django-rest-framework,Python,Json,Django,Serialization,Django Rest Framework,我正在使用Django Rest框架。我有一个获取JSON数据的API。我有一个列表序列化程序,试图验证父JSON中的列表。列表如下所示: [{ type:"integer", name: "Age", range: [18, 60] }, { type: "string", name: "Email", pattern : "email" }, { type: "date", name: "Joining Date", format: "mm-dd-yyyy" }] 我有一
[{
type:"integer",
name: "Age",
range: [18, 60]
},
{
type: "string",
name: "Email",
pattern : "email"
},
{
type: "date",
name: "Joining Date",
format: "mm-dd-yyyy"
}]
我有一个处理其余数据的序列化程序。属性之一是此列表,它由列表序列化程序负责。现在,对于列表中的单个元素,验证取决于type属性
例如:如果类型为integer,则我希望有一个范围。如果类型是string,则我需要一个模式。
如果类型是date,则需要一种格式
验证此类数据的好方法是什么
如何验证?我通常使用以下模式:
data = [{
"type": "integer",
"name": "Age",
"range": [18, 60]
},
{
"type": "string",
"name": "Email",
"pattern": "email"
},
{
"type": "date",
"name": "Joining Date",
"format": "mm-dd-yyyy"
}]
rules = {
"integer": {
"must_contains": ["range"]
},
"string": {
"must_contains": ["pattern"]
}
}
class ValidationError(Exception):
pass
class Validator(object):
def __init__(self, rules):
self.rules = rules
@staticmethod
def _check_contains_rule(rule, obj):
for elem in rule.get("must_contains", ()):
if not obj.get(elem):
raise ValidationError("Object with type %s must contains %s!" % (obj["type"], elem))
def validate(self, data):
for obj in data:
rule = self.rules.get(obj["type"])
if rule:
self._check_contains_rule(rule, obj)
v = Validator(rules)
v.validate(data)