任意键JSON模式验证(JSON schema validation with arbitrary

2019-08-31 11:01发布

我使用validictory用于验证连接的JSON数据和架构。 到目前为止工作。

然而,数据字典可以有任意的字符串键(别人比“BP”,但)。 在此架构中的关键“BP”是硬编码...它可以从给定的列表(字符串枚举)的字符串。 我怎么在这里添加枚举定义为字典的“第一级”。

import json
import validictory

data = {'bp': [{'category': 'bp',
         'created': '2013-03-08T09:14:48.148000',
         'day': '2013-03-11T00:00:00',
         'id': 'dc049c0e-d19a-4e3e-93ea-66438a239712',
         'unit': 'mmHg',
         'value': 147.0,
         'value2': 43.0}]}


schema = {
    "type":"object",
    "properties":{
        "bp": {
            "type":"array",
            "required":False,
            "items":
                {
                    "type":"object",
                    "required":False,
                    "properties":{
                        "category": {
                            "type":"string",
                            "default": "bp",
                            "required":False
                        },
                        "created": {
                            "type":"string",
                            "default": "2013-03-08T09:14:48.148000",
                            "required":False
                        },
                        "day": {
                            "type":"string",
                            "default": "2013-03-11T00:00:00",
                            "required":False
                        },
                        "id": {
                            "type":"string",
                            "default": "dc049c0e-d19a-4e3e-93ea-66438a239712",
                            "required":False
                        },
                        "unit": {
                            "type":"string",
                            "default": "mmHg",
                            "required":False
                        },
                        "value2": {
                            "type":"number",
                            "default":43,
                            "required":False
                        },
                        "value": {
                            "type":"number",
                            "default":147,
                            "required":False
                        }
                    }
                }


        }
    }
}

validictory.validate(data,schema)

Answer 1:

这取决于你想要做什么。

如果你想同规格的,但对于一个范围的性质,可以抽象出的定义:

{
    "type": "object",
    "properties": {
        "bp": {"$ref": "#/definitions/categoryList"},
        "foo": {"$ref": "#/definitions/categoryList"},
        "bar": {"$ref": "#/definitions/categoryList"}
    },
    "definitions": {
        "categoryList": {...}
    }
}

如果你想要的任何属性遵循这个模式,你可以使用additionalProperties

{
    "type": "object",
    "additionalProperties": {...}
}

或范围的属性(由图案匹配)的 - 例如,任何东西小写:

{
    "type": "object",
    "patternProperties": {
        "^[a-z]+$": {...}
    }
}

如果你想限制可以定义的属性的数量,那么你可以使用“maxProperties”(标准的V4只):

{
    "type": "object",
    "additionalProperties": {...},
    "maxProperties": 1
}

PS -在“必需的”标准,V4的是一个数组。 事实上,即使是在V3,“必需的”默认为false ,所以你的例子并不需要它在所有



文章来源: JSON schema validation with arbitrary keys