Python 我如何只允许使用字典键;来源“&引用;“目的地”;及;保留;(参见下面的config.json)作为json模式中的字典键?
在json模式中,如何只允许字典键“source”、“dest”和“keep”(参见下面的config.json)作为字典键 使用Python 我如何只允许使用字典键;来源“&引用;“目的地”;及;保留;(参见下面的config.json)作为json模式中的字典键?,python,json,dictionary,schema,jsonschema,Python,Json,Dictionary,Schema,Jsonschema,在json模式中,如何只允许字典键“source”、“dest”和“keep”(参见下面的config.json)作为字典键 使用“required”:[“snapshots”]和“additionalProperties”:False我设法只允许键“snapshots”,但对键“string”的字典值进行类似操作(“required”):[“source”、“dest”、“keep”])并没有将所需的约束添加到我的json配置中 我测试了后者,例如将config.json文件中的键“sourc
“required”:[“snapshots”]
和“additionalProperties”:False
我设法只允许键“snapshots”,但对键“string”的字典值进行类似操作(“required”):[“source”、“dest”、“keep”]
)并没有将所需的约束添加到我的json配置中
我测试了后者,例如将config.json
文件中的键“source”更改为“somethingElse”,但是jsonschema.validate()
没有引发任何错误,尽管我预期会发生
schemaTest.py:
import json
from jsonschema import validate
schema = {
"$schema": "http://json-schema.org/schema",
"required": ["snapshots"],
"additionalProperties": False,
"properties":
{
"snapshots":
{
"type": "object",
"properties":
{
"string":
{
"type": "object",
"items": { "type": "string" },
"uniqueItems": True,
"properties":
{
"source": {"type": "string"},
"dest": {"type": "string"},
"keep": {"type": "string"}
},
"required": ["source","dest", "keep"],
"additionalProperties": False
}
}
}
}
}
path = "/home/user/test/config.json"
jsonConfig = json.load(open(path))
print(validate(jsonConfig, schema))
config.JSON:
{
"snapshots":
{
"@snapshot1":
{
"source": "/mnt/subvolContainer/@snapshot1",
"dest": "/mnt/subvolContainer/",
"keep": "w=10,m=10"
},
"@snapshot2":
{
"source": "/mnt/subvolContainer/@snapshot2",
"dest": "/mnt/subvolContainer/",
"keep": "w=10,m=10"
}
}
}
在快照对象的定义中有一些额外的嵌套层<例如,代码>字符串,不是您正在使用的属性名称。要验证对象中未知键的子项的属性,需要将类型放入
additionalProperties
对象中<代码>项和唯一项
应用于数组,而不是对象
这项工作:
schema = {
"$schema": "http://json-schema.org/schema",
"required": ["snapshots"],
"additionalProperties": False,
"properties":
{
"snapshots":
{
"type": "object",
"additionalProperties":
{
"type": "object",
"properties":
{
"source": {"type": "string"},
"dest": {"type": "string"},
"keep": {"type": "string"}
},
"required": ["source","dest", "keep"],
"additionalProperties": False
}
}
}
}