在Python中,我需要像这样验证复杂的json数据结构:
datainstances = {"apache1" :{"user":1,"dirname":"apache1dir","blah":42},"apache2" :{"user":"apache2","dirname":"apache2dir"},"apache3" :{"user1":"apache2","dirname":"apache2dir"}}因此,我对这个模式使用jsonschema验证函数。
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结构验证为:
我做错了吗?是我没看到的东西
编辑代码
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)发布于 2017-12-24 01:37:33
您的patternProperties条目有regex“^a+$”。关键是"apache1“。此键与regex不匹配,因为它包含一个数字。因为patternProperties不匹配,所以对数据没有强制约束。一切都会证明。也许您需要"^a-z0-9+$“或”^a+0-9$“或”^a“。
https://stackoverflow.com/questions/47924996
复制相似问题