【问题标题】:Validating a json with attribute named "type"使用名为“type”的属性验证 json
【发布时间】:2019-05-14 21:32:08
【问题描述】:

我正在尝试使用以下格式断言 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”属性被保留用于断言文档的类型。 如果我更改任何其他东西的“类型”属性(来自模式和 myjson 变量),它可以正常工作!

有没有办法使用 jsonschema 来声明一个名为“type”的属性?

【问题讨论】:

  • 我们走了.. 是的,用 mystring 输入 cant。

标签: python jsonschema


【解决方案1】:

计划根对象对我有用:

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

【讨论】:

    【解决方案2】:

    我制作了一个更简单的版本来说明这个问题。您的类型设置错误。

    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/

    【讨论】:

    • 感谢您的回答,但不幸的是我认为它并不能解决问题。这可以断言这个 json:{"data": "mystring"}。但我试图断言的 json 是这样的:{"type": "mystring", "data": "mystring2"}
    • 重新检查我的答案。你指定不正确,你有type 然后你的字符串`mystring, it should be type`string。然后你传入你的数据来校准 config/schmea。您的架构当前将 mystring 作为一种类型?我从未听说过 mystring 类型。但肯定是字符串类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多