如何验证Cerberus中的嵌套字典对象

2024-05-18 10:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是需要验证的示例数据。employee_eligibility嵌套字典中的键是数字字符串“[0-9]+”

{
  "client_id": 1,
  "subdomain": "Acme",
  "shifts": [
    20047, 20048, 20049
  ],
  "employee_eligibility": {
    "1": {
      "20047": 1,
      "20048": 0,
      "20049": 1
    },
    "2": {
      "20047": 1,
      "20048": 0,
      "20049": 1
    },
    "3": {
      "20047": 1,
      "20048": 1,
      "20049": 0
    }
  }
}

我已经编写了以下验证模式:

    {
        "client_id": {"type": "integer"},
        "subdomain": {"type": "string"},
        "shifts": {"type": "list", "schema": {"type": "integer"}},
        "employee_eligibility": {
            "type": "dict",
            "keysrules": {"type": "string", "regex": "[0-9]+"},
            "schema": {
                "type": "dict",
                "keysrules": {"type": "string", "regex": "[0-9]+"},
                "schema": {"type": "integer"}
            }
        },
    }

运行验证时,出现以下错误:

{'employee_eligibility': ['must be of dict type']}

Tags: 数据subdomainclientid示例stringschematype
1条回答
网友
1楼 · 发布于 2024-05-18 10:16:47

您的模式稍有偏差,您需要使用valuesrules来验证字典的值

schema = {
    "client_id": {"type": "integer"},
    "subdomain": {"type": "string"},
    "shifts": {"type": "list", "schema": {"type": "integer"}},

    # `employee_eligibility` is a dictionary
    "employee_eligibility": {
        "type": "dict",

        # the keys in `employee_eligibility` are strings matching this regex
        "keysrules": {"type": "string", "regex": "^[0-9]+"},

        # the values in `employee_eligibility` are also dictionaries with keys
        # that are strings that match this regex and integer values
        "valuesrules": {
            "type": "dict",
            "keysrules": {"type": "string", "regex": "^[0-9]+"},
            "valuesrules": {"type": "integer"},
        },
    },
}

编辑:添加了一些注释以注释示例

相关问题 更多 >