18 python validation jsonschema
我正在使用验证来验证附加的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)
Run Code Online (Sandbox Code Playgroud)
clo*_*eet 31
这取决于你正在尝试做什么.
如果您想要相同的规范,但是对于一系列属性,您可以抽象出定义:
{
"type": "object",
"properties": {
"bp": {"$ref": "#/definitions/categoryList"},
"foo": {"$ref": "#/definitions/categoryList"},
"bar": {"$ref": "#/definitions/categoryList"}
},
"definitions": {
"categoryList": {...}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望任何属性遵循该架构,您可以使用additionalProperties:
{
"type": "object",
"additionalProperties": {...}
}
Run Code Online (Sandbox Code Playgroud)
或者一系列属性(由模式匹配) - 例如,任何小写:
{
"type": "object",
"patternProperties": {
"^[a-z]+$": {...}
}
}
Run Code Online (Sandbox Code Playgroud)
如果要限制可以定义的属性数,则可以使用"maxProperties"(仅限标准的v4):
{
"type": "object",
"additionalProperties": {...},
"maxProperties": 1
}
Run Code Online (Sandbox Code Playgroud)
PS - 在标准的第4版中,"required"是一个数组.事实上,即使在v3中,"required"默认为false,所以你的例子根本不需要它