繁体   English   中英

Python jsonschema验证

[英]Python jsonschema validation

在Python中,我需要像这样验证复杂的json数据结构:

datainstances = {"apache1" :{"user":1,"dirname":"apache1dir","blah":42},"apache2" :{"user":"apache2","dirname":"apache2dir"},"apache3" :{"user1":"apache2","dirname":"apache2dir"}}

所以我对这个模式使用jsonschema validate函数

schemainstances = { 

                    "definitions" :{
                      "instance":{
                        "type":"object",
                        "properties": {
                          "user": {"type":"string"},
                          "dirname": {"type":"string"},
                          "blah": {"type":"string"}

                        },
                        "required" : ["user","blah"]
                      }
                  },
                  "type":"object",
                  "patternProperties": {
                    "^[a-z]+$": {"$ref": "#/definitions/instance"}  
                  }

}

我的目的是它不应将此json结构验证为:

  1. apache1的用户属性必须是字符串a
  2. apache1的等等属性也必须是字符串

我做错了吗? 是我没看到的东西

编辑代码

import json
from jsonschema import validate
schemainstances = { 

                    "definitions" :{
                      "instance":{
                        "type":"object",
                        "properties":{
                          "user": {"type":"string"},
                          "dirname": {"type":"string"},
                          "blah": {"type":"string"}

                        },
                        "required" : ["user","blah"]
                      }
                  },
                  "type":"object",
                  "patternProperties":{
                    "^[a-z]+$": {"$ref": "#/definitions/instance"}  
                  }

}



datainstances = {"apache1" :{"user":1,"dirname":"apache1dir","blah":42},"apache2" :{"user":"apache2","dirname":"apache2dir"},"apache3" :{"user1":"apache2","dirname":"apache2dir"}}


retour = validate(datainstances,schemainstances)

print(retour)

您的patternProperties条目具有正则表达式“ ^ [az] + $”。 关键是“ apache1”。 该密钥与您的正则表达式不匹配,因为它包含一个数字。 由于patternProperties不匹配,因此对您的数据没有任何约束。 一切都会验证。 也许您想要“ ^ [a-z0-9] + $”或“ ^ [az] + [0-9] $”或“ ^ [az]”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM