Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何只允许使用字典键;来源“&引用;“目的地”;及;保留;(参见下面的config.json)作为json模式中的字典键?_Python_Json_Dictionary_Schema_Jsonschema - Fatal编程技术网

Python 我如何只允许使用字典键;来源“&引用;“目的地”;及;保留;(参见下面的config.json)作为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

在json模式中,如何只允许字典键“source”、“dest”和“keep”(参见下面的config.json)作为字典键

使用
“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
      }
    }
  }
}