验证具有名为“ type”的属性的json

时间:2019-05-14 21:32:09

标签: python jsonschema

我正在尝试使用以下格式声明json:

{"type": "mystring", "data": "mystring2"}

通过使用以下代码:

from jsonschema import validate

schema = {"type": "string", "data": "string"}
myjson = {"type": "mystring", "data": "mystring2"}

validate(myjson, schema)

我收到此错误:

jsonschema.exceptions.ValidationError: {'type': 'mystring', 'data': 'mystring2'} is not of type 'string'

Failed validating 'type' in schema:

    {'data': 'string', 'type': 'string'}

On instance:
    {'data': 'mystring2', 'type': 'mystring'}

似乎保留了“ type”属性以断言文档的类型。 如果我更改“ type”属性(来自架构和myjson变量)以进行任何其他操作,则它将正常工作!

是否可以使用jsonschema断言名为“ type”的属性?

2 个答案:

答案 0 :(得分:2)

设计根对象对我有用:

from jsonschema import validate

schema = {
    'type': 'object',
    'properties': {
        'data': { 'type': 'string' },
        'type': { 'type': 'string' }
    }
}

myjson = {'type': 'mystring', 'data': 'mystring2'}

validate(myjson, schema) # All good

现在让它失败:

myjson = {'type': 42, 'data': 'mystring2'}

validate(myjson, schema)

Failed validating 'type' in schema['properties']['type']:
    {'type': 'string'}

On instance['type']:
    42

答案 1 :(得分:1)

我制作了一个简单的版本来说明问题。您的类型设置不正确。

from jsonschema import validate

schema = {"data": {"type" : "string"}} # define your key then its type
myjson = {"data": "mystring"} # your key, and its value

validate(myjson, schema) # validate

使用您自己的数据

from jsonschema import validate

schema = { "data": {"type": "string"}}
myjson = {"type": "mystring", "data": "mystring2"}

validate(myjson, schema)

阅读文档并使用其示例始终是一个好主意。

https://python-jsonschema.readthedocs.io/en/stable/