JSON 和 Python:jsonschema 没有预期的验证错误
JSON with Python: No expected validation errors with jsonschema
我已经定义了一个架构并使用它来验证 JSON 对象,但我从未得到预期的 ValidationError。例如:
>>> from jsonschema import validate
>>> schema = {
... "type" : "object",
... "properties" : {
... "address" : {"type" : "string"},
... },
... }
>>>
>>> schema
{'type': 'object', 'properties': {'address': {'type': 'string'}}}
>>> validate(instance={"address" : "123 Main St.", "price" : 34.99}, schema=schema)
>>> validate(instance={"address1" : "123 Main St.", "price" : 34.99}, schema=schema)
>>>
>>> validate(instance={"addresdvzdvfafczscss1" : "123 Main St.", "price" : 34.99}, schema=schema)
>>> validate(instance={"addresdvzdvfafczscss1" : "123 Main St.", "price" : 34.99}, schema=schema)
# doctest: +IGNORE_EXCEPTION_DETAIL
>>>
>>> validate(instance={"addresdvzdvfafczscss1" : "123 Main St.",}, schema=schema) # doctest: +IGNO
RE_EXCEPTION_DETAIL
>>>
>>> type(schema)
<class 'dict'>
>>> str(schema)
"{'type': 'object', 'properties': {'address': {'type': 'string'}}}"
>>> validate(instance={"addresdvzdvfafczscss1" : 123,}, schema=schema) # doctest: +IGNORE_EXCEPTIO
N_DETAIL
>>>
谁能看出我做错了什么?
你没有说出你预期得到的错误,但我猜你想让验证抱怨“地址”属性 丢失。为此,您需要使用 required
关键字,因此请尝试:
{
"type": "object",
"required": [ "address" ],
"properties": {
"address": {"type": "string"}
}
}
您可能还想说“不允许使用除地址以外的其他属性”——这可以通过 "additionalProperties": false
.
来完成
我已经定义了一个架构并使用它来验证 JSON 对象,但我从未得到预期的 ValidationError。例如:
>>> from jsonschema import validate
>>> schema = {
... "type" : "object",
... "properties" : {
... "address" : {"type" : "string"},
... },
... }
>>>
>>> schema
{'type': 'object', 'properties': {'address': {'type': 'string'}}}
>>> validate(instance={"address" : "123 Main St.", "price" : 34.99}, schema=schema)
>>> validate(instance={"address1" : "123 Main St.", "price" : 34.99}, schema=schema)
>>>
>>> validate(instance={"addresdvzdvfafczscss1" : "123 Main St.", "price" : 34.99}, schema=schema)
>>> validate(instance={"addresdvzdvfafczscss1" : "123 Main St.", "price" : 34.99}, schema=schema)
# doctest: +IGNORE_EXCEPTION_DETAIL
>>>
>>> validate(instance={"addresdvzdvfafczscss1" : "123 Main St.",}, schema=schema) # doctest: +IGNO
RE_EXCEPTION_DETAIL
>>>
>>> type(schema)
<class 'dict'>
>>> str(schema)
"{'type': 'object', 'properties': {'address': {'type': 'string'}}}"
>>> validate(instance={"addresdvzdvfafczscss1" : 123,}, schema=schema) # doctest: +IGNORE_EXCEPTIO
N_DETAIL
>>>
谁能看出我做错了什么?
你没有说出你预期得到的错误,但我猜你想让验证抱怨“地址”属性 丢失。为此,您需要使用 required
关键字,因此请尝试:
{
"type": "object",
"required": [ "address" ],
"properties": {
"address": {"type": "string"}
}
}
您可能还想说“不允许使用除地址以外的其他属性”——这可以通过 "additionalProperties": false
.