Python 如何根据特定属性的值以不同方式验证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" }] 我有一

我正在使用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,则我希望有一个范围。如果类型是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)