【问题标题】:Python jsonschema validationPython jsonschema 验证
【发布时间】:2017-12-21 12:26:49
【问题描述】:

在 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 结构验证为:

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

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

编辑代码

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)

【问题讨论】:

  • 你能显示你的代码吗?你得到了什么错误或其他你没想到的结果?
  • 我没有,所以它通过了验证:
  • 在此处使用在线验证器:jsonschemavalidator.net 还显示您的数据验证。您的代码显然是一致的。不知道为什么你的架构没有验证。

标签: python python-3.x validation jsonschema


【解决方案1】:

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

【讨论】:

  • ty Jason 我会试试这个。显然我确实已经完全睁开了眼睛
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多