首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python jsonschema验证

Python jsonschema验证
EN

Stack Overflow用户
提问于 2017-12-21 12:26:49
回答 1查看 1.5K关注 0票数 0

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

代码语言:javascript
复制
datainstances = {"apache1" :{"user":1,"dirname":"apache1dir","blah":42},"apache2" :{"user":"apache2","dirname":"apache2dir"},"apache3" :{"user1":"apache2","dirname":"apache2dir"}}

因此,我对这个模式使用jsonschema验证函数。

代码语言:javascript
复制
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的用户属性必须是一个字符串
  2. apache1的blah属性也必须是字符串。

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

编辑代码

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-24 01:37:33

您的patternProperties条目有regex“^a+$”。关键是"apache1“。此键与regex不匹配,因为它包含一个数字。因为patternProperties不匹配,所以对数据没有强制约束。一切都会证明。也许您需要"^a-z0-9+$“或”^a+0-9$“或”^a“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47924996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档