jsonschema.validate()无法验证架构中的类型

时间:2018-12-05 15:07:45

标签: python json jsonschema python-jsonschema

我不确定我是否读错了jsonschema的文档,但是据我所知,此程序包应允许我使用jsonschema.validate()检查JSON对象是否符合指定的架构。以下代码不会告诉我"age"应该是数字。

import json
import jsonschema

schema = '{"name":{"type":"string","required":true},"age":{"type":"number","required":true}}'
schema = json.loads(schema)
data = '{"name":"Foo","age":"Bar"}'

def json_validator(data):
    try:
        json.loads(data)
        print("Valid Json")
        return True
    except ValueError as error:
        print("Invalid JSON: %s" % error)
        return False

def schema_validator(data, schema):
    try:
        jsonschema.validate(data, schema)
    except jsonschema.exceptions.ValidationError as e:
        print(e)
    except jsonschema.exceptions.SchemaError as e:
        print(e)

json_validator(data)
schema_validator(data, schema)

我错过了什么吗?还是应该这样做?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的架构不是有效的架构。您需要将它们声明为properties,并且您错误地使用required(除非您使用的是Draft-03,这在目前还不太可能)。这是您想要的架构。

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "number" }
  },
  "required": ["name", "age"]
}